我在我的应用程序中使用选项菜单。但是当我在 Galaxy Nexus 上安装应用程序时,我看不到选项菜单,因为默认情况下它没有选项菜单按钮。如何在我的应用程序中仅显示 Galaxy Nexus 的选项菜单按钮?用其他手机没问题,我可以得到选项菜单。
4 回答
在 Android 3.0 中,Google 从拥有专用菜单键切换到使用ActionBar
for menu 功能。如果您的构建目标是 3.0 或更高版本,您的菜单将默认使用ActionBar
.
如果手机上有菜单键,则通常由操作栏中的三个点图标显示的任何超出选项都将显示为菜单按钮。如果手机上没有菜单键,所有选项都会显示在操作栏上。因为菜单键正在消失,所以鼓励您ActionBar
在 3.0 及更高版本中使用该类作为您的菜单。
现在,在没有菜单键的新平台上运行的旧应用程序将在最近的应用程序按钮旁边生成一个假菜单键。此临时菜单键仅在您的构建目标为 2.3.4 或更低版本时才会出现,因为它只是出于向后兼容性的原因而存在。(编辑:构建目标应该小于或包括 API 13)
在您的情况下,您应该使用ActionBar
您的菜单,因为您是针对较新版本的 Android 构建的。如果您担心向后兼容性,那么您可以随时利用 ActionBarSherlock 之类的库在旧平台上使用操作栏。
你需要考虑为什么你需要一个“选项”按钮——这是一个旧的、糟糕的模式,它已经被ActionBar
真正更好的模式所取代。
但是您可能出于客户原因需要它(例如我需要为客户保留它)。如果是这种情况,那么您可以按照我的以下建议(从错误提到的“操作栏”的原始内容略微编辑)
您可以将您build target
的版本设置为 ICS 之前的版本(即达到并包括 API 13 / HoneyComb 3.2)。
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="13" />
这将使系统使用兼容模式设置,将overflow
图标插入手机的底部按钮栏中 - 这应该提供您所追求的功能。例如,按下此按钮与按下三星 Galaxy S2 上的“菜单”按钮具有相同的响应。
在这里您可以看到兼容性“选项”按钮,以及按下它时显示的菜单:
笔记:
正如其他评论员所提到的,您应该考虑更好的ActionBar
模式选择。如果你想要向后兼容,那么我推荐 Action Bar Sherlock 库。
但是,如果您正在寻找快速解决方案,或者客户负担不起大的重构来迁移到 Action Bar 模式,那么这就是实现它的方法。
如果您使用Action Bar,选项菜单将被溢出替换。如果没有,你必须自己实现一个按钮,在你自己的应用程序的某个地方。
菜单按钮(也称为耻辱的兼容性菜单)仅显示在系统栏中,用于面向 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();
}
选项菜单从 android 版本 3.x (Honeycomb) 停止。因此,选项菜单按钮并非必须出现在最新手机上。所以去行动吧。您可以使用Sherlock ActionBar
库来支持所有平台的操作栏。
更新:用户ActionBarCompat