原文链接:http://android-developers.blogspot.kr/2012/01/say-goodbye-to-menu-button.html
在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就会弹出一个下拉菜单。
![](http://www.daxueit.com/upload/201405/11/071541371984295.png)
即使你的应用专门构建运行在android3.0以前的版本上(不支持actionbar,必须使用菜单按钮来显示一些用户选项的版本),当这个应用运行在不支持菜单按钮的android3.0或者以后版本上,点击菜单按钮时菜单的功能选项将会出现在overflow中。
这看起来很麻烦很啰嗦,但是点击overflow确实是一个不同的思维方式。你应该好好思考哪些重要的用户操作应该显示在actionbar中去方便用户操作,哪些应该显示在overflow中,而不是简简单单的显示一些菜单选项的罗列。
在老版本的app中的overflow按钮
如果你已经开发了一个应用程序来支持Android 2.3和更低,那么您可能已经注意到,当它运行在没有硬件的设备菜单按钮(如蜂窝版本的平板电脑或者Galaxy Nexus),系统会增加按钮系统导航。
![](http://www.daxueit.com/upload/201405/11/071541278705945.png)
增加按钮系统导航旨在能够确保兼容构建在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时使用一些用户图标,例如分享,删除,收藏等。
![](http://www.daxueit.com/upload/201405/11/071541059956428.png)
如果这些图标都不是你想要的你可以设计你自己的,参见Iconography design guide。
移除actionBar
如果你并不需要actionBar,你可以在你整个应用中或者在某一个activity中移除。这样适用于某些应用根本没有必要使用功能选项(例如:游戏)。你可以使用 Theme.Holo.NoActionBar或者Theme.DeviceDefault.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://www.daxueit.com/article/3189.html