我在我的应用中使用选项菜单。但是当我在Galaxy Nexus上安装应用程序时,我没有看到选项菜单,因为默认情况下它没有选项菜单按钮。如何在我的应用程序中仅为Galaxy Nexus显示选项菜单按钮?使用其他手机很好,我可以选择菜单。
答案 0 :(得分:13)
在Android 3.0中,Google从使用专用菜单键切换到使用ActionBar
菜单功能。如果您的构建目标是3.0或更高,您的菜单将默认使用ActionBar
。
如果手机上有菜单键,则操作栏中三个圆点图标通常显示的任何选项都将显示菜单按钮。如果手机上没有菜单键,则操作栏上将显示所有选项。由于菜单键即将消失,因此建议您使用3.0 {及更高版本的菜单ActionBar
类。
现在,在没有菜单键的新平台上运行的旧应用程序将在最近的应用程序按钮旁边生成虚假菜单键。这个临时菜单键只有在你的构建目标是2.3.4或更低时才会出现,因为它只是出于向后兼容的原因。 (编辑:构建目标应该是任何小于,或包括API 13)
在您的情况下,您应该使用ActionBar
作为菜单,因为您是针对较新版本的Android构建的。如果您担心向后兼容性,那么您可以始终使用ActionBarSherlock等库来使用旧平台上的操作栏。
答案 1 :(得分:5)
你需要考虑为什么你想要一个“选项”按钮 - 这是一个旧的,糟糕的模式,已被ActionBar
取代,这真的更好。
但是你可能需要它,出于客户的原因(比如我需要为客户端保留它)。如果是这样的话,那么你可以按照我的建议(稍微编辑一下,错误地提到“动作栏”)
您可以将build target
设置为ICS之前的版本(即最高包括API 13 / HoneyComb 3.2)。
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="13" />
这将使系统使用兼容模式设置,将overflow
图标插入手机的底部按钮栏 - 这应该提供您所需的功能。按下此按钮的响应与按Samsung Galaxy S2上的“菜单”按钮的响应相同。
在这里,您可以看到兼容性“选项”按钮,以及按下时显示的菜单:
正如其他评论员所提到的,你应该考虑更好地选择ActionBar
模式。如果你想向后兼容,那么我推荐Action Bar Sherlock库。
但是如果你正在寻找一个快速修复,或者客户端无法承受一个大的重构来转移到Action Bar模式,那么这就是实现它的方法。
答案 2 :(得分:4)
如果使用Action Bar,选项菜单将被溢出替换。 如果没有,你必须自己实现一个按钮,在你自己的应用程序中。
菜单按钮(也称为 Shame的兼容性菜单)仅显示在应用程序定位API 13或更低版本的系统栏中
这是一种检查设备是否具有硬件菜单键的方法。
// Menu key
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
hasPermanentMenuKey = hasPermanentMenuKey(context.getApplicationContext());
}
else {
// No way to know for sure...
// All devices before Honeycomb should have a menu key.
// Honeycomb device usually don't have one
hasPermanentMenuKey = Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB;
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
private boolean hasPermanentMenuKey(Context context) {
return ViewConfiguration.get(context).hasPermanentMenuKey();
}
答案 3 :(得分:2)
选项菜单从Android版本3.x(Honeycomb)停止。因此,最新手机上的选项菜单按钮不是强制性的。所以去行动吧。您可以使用Sherlock ActionBar
库来支持所有平台中的操作栏。
更新:用户 ActionBarCompat