Android菜单和操作栏转换

6

Android中有一个新概念:

http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html

但对我来说不太清楚。我有一个应用程序,支持从1.6到4.0版本。我想遵循这个新概念,但我无法在菜单xml中设置showAsAction属性,因为会出现以下错误:

"No resource identifier found for attribute 'showAsAction' in package 'android'"

这是正常的,因为文档中注明:

"注意:android:showAsAction属性仅适用于Android 3.0(API Level 11)及更高版本。"

我该如何设置菜单,以便在3.0以下显示简单菜单,在3.0以上显示ActionBar?

4个回答

5
根据您分享的博客文章摘要: Android不再需要专门的菜单按钮,一些设备没有该按钮,因此您应该迁移至其他选项。

将targetSdkVersion设置为14,然后在Android 4.0上测试您的应用程序。

将showAsAction =“ifRoom”添加到菜单项中,以便在操作栏中显示它们。

如果ActionBar不适用于您的应用程序,则可以使用Theme.Holo.NoActionBar或Theme.DeviceDefault.NoActionBar将其删除。

因此,您只需执行以下步骤: 首先,在AndroidManifest.xml文件中设置SDK的min和目标版本,如下所示: <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="14" /> 其次,在menu.xml文件中的菜单项中添加showAsAction ="ifRoom"。
现在在Honeycomb或Ice Cream Sandwich中运行您的应用程序,就应该在操作栏中看到您的菜单。您的应用程序仍然适用于Android 3.0之前的版本。

2

在Eclipse中打开项目属性(右键单击项目并选择“属性”), 然后进入Android部分,将项目构建目标更改为Android 4.0。必须这样做,以便构建系统识别showAsAction

不要担心您的项目无法在Android 4.0以下版本上运行,只要不调用仅在4.0上可用的类或方法,您仍然可以运行它。


再次尝试了您的建议,然后我到达了showAsAction属性,我也可以检查版本:if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { ActionBar actionBar = getActionBar();} 我可以在我的SGS2上运行2.3,但在我的模拟器上只能运行4.0,因此旧版本的模拟器未出现在列表中。我担心在市场上会有兼容性问题,我的程序只能在4.0机器上使用。或者这取决于minSdkVersion属性吗? - Robertoq
1
市场上的可用性取决于minSdkVersion而不是目标。 - Randy Sugianto 'Yuku'

0

您可以使用Build.VERSION在每个版本中执行不同的操作。 例如:Build.VERSION.SDK_INT<Build.VERSION_CODES.HONEYCOMB


0

您可以使用一些操作系统技术在API级别低于11的应用程序中提供ActionBar。

考虑使用ActionBarSherlock。您只需将其作为库项目添加到您的项目中,如果您不设置Sherlock主题,则不会显示操作栏(如果您不想显示它),但是您可以使用“showAsAction”标记您的菜单项。在API级别高于10的设备上,将正常显示带有菜单项的操作栏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接