【问题标题】:Show options menu button on Galaxy Nexus (Android 4.1)在 Galaxy Nexus (Android 4.1) 上显示选项菜单按钮
【发布时间】:2013-02-21 09:38:50
【问题描述】:

我在我的应用程序中使用选项菜单。但是当我在 Galaxy Nexus 上安装应用程序时,我看不到选项菜单,因为默认情况下它没有选项菜单按钮。如何在我的应用程序中仅显示 Galaxy Nexus 的选项菜单按钮?用其他手机没问题,我可以得到选项菜单。

【问题讨论】:

  • 你的构建目标是什么?
  • 果冻豆4.1及以上

标签: android galaxy-nexus


【解决方案1】:

在 Android 3.0 中,Google 从使用专用菜单键切换到使用 ActionBar 来实现菜单功能。如果您的构建目标是 3.0 或更高版本,您的菜单将默认使用 ActionBar

如果手机上有菜单键,则通常由操作栏中的三个点图标显示的任何溢出选项都将与菜单按钮一起显示。如果手机上没有菜单键,所有选项都会显示在操作栏上。由于菜单键即将消失,因此鼓励您在 3.0 及更高版本的菜单中使用 ActionBar 类。

现在,在没有菜单键的新平台上运行的旧应用程序将在最近使用的应用程序按钮旁边生成一个假菜单键。此临时菜单键仅在您的构建目标为 2.3.4 或更低版本时才会出现,因为它只是出于向后兼容性的原因而存在。 (编辑:构建目标应该小于或包括 API 13)

在您的情况下,您应该使用ActionBar 作为您的菜单,因为您是针对较新版本的 Android 构建的。如果您担心向后兼容性,那么您可以随时利用 ActionBarSherlock 等库在旧平台上使用操作栏。

【讨论】:

  • 我的荣幸。如果它满足您的需求,请务必接受答案,以便其他人可以从信息中受益。
  • 事实证明 @nicopico 是正确的,并且 CMoS 按钮可用于构建目标最多 13 个 (3.2),而不仅仅是最多 8 个 (2.3.4)
【解决方案2】:

您需要考虑一下为什么要使用“选项”按钮 - 这是一种旧的、糟糕的模式,已被 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 模式,那么这就是实现它的方法。

【讨论】:

  • 但是你不能使用 ICS 或 JellyBean 添加的任何不错的功能
【解决方案3】:

如果您使用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();
}

【讨论】:

  • 喜欢兼容性菜单的名称。从现在开始我将使用它。
【解决方案4】:

选项菜单从 android 版本 3.x (Honeycomb) 停止。因此,选项菜单按钮并非必须出现在最新手机上。所以去行动吧。您可以使用Sherlock ActionBar库来支持所有平台的操作栏。

更新:用户ActionBarCompat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多