[This post is by Scott Main, lead tech writer forclass="Apple-converted-space"> developer.android.com. — Tim Bray]
在Android 3.0(蜂窝)之前,所有安卓手机都有一个专门的菜单按键。作为开发者可以利用菜单按键向用户展示一些相关的内容。Android 3.0(蜂窝)去掉了与菜单按键,而引进了ActionBar这个类,利用这个类用户可以快速的调用菜单。在以后我们设计的程序中,我们要尽量避免使用菜单按钮,最好使用ActionBar这个类。使用ActionBar并不是一个新的概念,早在Android 3.0(蜂窝)就已经有了。
你可能会担心如果应用支持ActionBar将会改动很大,因为你的应用必须支持Android 3.0(蜂窝)之前的
版本。但实际上对于大多数的的应用程序来说支持ActionBar是很简单的,仅仅调用几行代码就行。
如果让我把所有的更改总结成一句话,那就是:“设置targetSdkVersion=14 并且 如果你使用了 optionsMenu”
ActionBar不是一个menu
你的应用程序停止支持菜单按钮,你构建应用程序的时候也不要去想支持菜单按钮。你构建Activity时应该在ActionBar上提供一些buttons来响应一些重要的用户操作。如果不是重要的功能应该放在ActionBar的overflow的弹出中。
在下面的截图中ActionBar中有一个搜索和一个overflow,点击这个overflow就会弹出一个下拉菜单。
即使你的应用专门构建运行在android3.0以前的版本上(不支持actionbar,必须使用菜单按钮来显示一些用户选项的版本),当这个应用运行在不支持菜单按钮的android3.0或者以后版本上,点击菜单按钮时菜单的功能选项将会出现在overflow中。
这看起来很麻烦很啰嗦,但是点击overflow确实是一个不同的思维方式。你应该好好思考哪些重要的用户操作应该显示在actionbar中去方便用户操作,哪些应该显示在overflow中,而不是简简单单的显示一些菜单选项的罗列。
在老版本的app中的overflow按钮
如果你已经开发了一个应用程序来支持Android 2.3和更低,那么您可能已经注意到,当它运行在没有硬件的
设备菜单按钮(如蜂窝版本的
平板电脑或者
Galaxy Nexus),系统会增加按钮系统导航。
增加按钮系统导航旨在能够确保兼容构建在android3.0之前版本的应用程序,但是这个导航并不是一个好的用户体验,实际上在应用程序中是不怎么使用菜单按钮的,所以在overflow中的菜单功能也不怎么直观,同样也会让用户很困惑的去找程序的功能按钮,所以你尽量少的去在显示overflow中显示功能选项,这样做的话能够更好的兼容Android3.0以后的版本。
如果你应用程序运行在没有菜单按钮的设备上,系统导航栏中显示不显示overflow取决于你的选用的API级别(在manifest中使用<uses-sdk>元素声明的Api),如下:
1.如果你设置setSdkVersion或者targetSdkVersion为11或11以上,系统将不会显示overflow按钮。
2.运行在android3.0或者以上版本的系统中,将会显示overflow按钮。
3.例外的是,如果你设置minSdkVersion为10或者更低,设置targetSdkVersion为11、12、13,并且没用使用ActionBar,当你的程序中运行在android4.0或者更高的版本中添加一个overflow按钮。
这个例外可能比较难以
理解,但是如果你想支持一个android3.0之前的版本的系统并且有一个菜单按钮。
如果你你不想让overflow按钮出现在你的设备上,你应该设置targetSdkVersion为14.(你必须不要设置minSdkVersion去支持任何一个版本)
功能选项按钮放在actionBar中
如果你的activity中在onCreateOptionsMenu()定义了一些菜单选项,并且在导航栏中并没有显示overflow按钮(因为你设置了taigetSdkVersion为14),你必须在ActionBar中定义让用户操作的功能选项。
如果ActionBar中有足够的空间让我们放置重要的功能按钮,我们可以在<item>标签中使用showAsAction="ifRoom"来显示这些重要的功能选项。如果想只能更加全面的在ActionBar中添加重要的动作相应,参见 android Design's Action Bar guide。
为了更好的提升ActionBar的用户体验。我们建议你在设计actionBar时使用一些用户图标,例如分享,删除,收藏等。
如果这些图标都不是你想要的你可以设计你自己的,参见Iconography design guide。
移除actionBar
如果你并不需要actionBar,你可以在你整个应用中或者在某一个activity中移除。这样适用于某些应用根本没有必要使用功能选项(例如:游戏)。你可以使用 Theme.Holo.NoActionBar或者Theme.Device
Default.NoActionBar的主题来移除actionBar。
为了能使用这一theme并且保持良好的向后兼容性,你可以使用
android系统自带的theme来应对不同版本的平台,就像亚当·鲍威尔的文章中所说的那样。
你需要保证的是你
自定义的主题根据当前平台版本来兼容不同的平台。
例如,这里你可以为你的应用声明一个自定义主题。
<application android:theme="@style/NoActionBar">
或者你可以在<activity>元素中声明主题。
在支持蜂窝之前版本的版本上在res/values-v11/themes.xml 中包含以下继承自标准平台的主题
<resources>
<style name="NoActionBar" parent="@android:style/Theme">
<!-- Inherits the default theme for pre-HC (no action bar) -->
</style>
</resources>
For pre-Honeycomb devices, include the following theme in
res/values/themes.xml
that inherits the standard platform theme:
在蜂窝或者以上版本中,在res/values-v11/themes.xml 中包含以下继承自NoActionBar theme的主题。
在运行时将基于系统的api版本来应用适当的NoActionBar主题。
<resources>
<style name="NoActionBar" parent="@android:style/Theme.Holo.NoActionBar">
<!-- Inherits the Holo theme with no action bar; no other styles needed. -->
</style>
</resources>
总结:
1.android将不再支持菜单按钮,一些设备也没有菜单按钮,你应该尽量避免使用菜单按钮。
2.设置targetSdkVersion为14在android4.0系统中来测试你应用程序。
3.添加showAsAction="ifRoom"在actionbar中显示重要的菜单功能
4.如果你的应用程序不需要菜单功能,你可以使用Theme.Holo.NoActionBar或者Theme.DeviceDefault.NoActionBar去掉actionbar
英文原文地址:http://android-developers.b
logspot.com/2012/01/say-goodbye-to-menu-button.html
第一次翻译,没什么经验,有
错误敬请谅解。
做个广告链接:
1、我新做的一个网站增光家电车辆商场
2、赶紧来优站链接:赶紧来