android - 如何在没有操作栏的情况下在 Honeycomb 上显示选项菜单?

标签 android android-actionbar android-menu

如何在没有操作栏的情况下在 Honeycomb 或 ICS 平板电脑上显示选项菜单?

经过一番尝试后,如果没有操作栏并且 targetsdkversion >=11,似乎无法在 Honeycomb 设备上使用选项菜单。即使您的主题是 Theme.Holo.NoActionBar。我能看到在 targetsdkversion>=11 的 Honeycomb 上显示选项菜单的唯一方法是使用具有操作栏的主题,然后将其隐藏在 onCreate 中。 我可以看到在 Honeycomb 上显示旧面板菜单的唯一方法是使用 targetsdkversion<=10。

总而言之,在 Honeycomb 中,如果您没有操作栏,就没有选项菜单,除非您的目标低于 11。这看起来像个 bug 。在 ICS 及更高版本中,您可以 有任何你喜欢的选项菜单,不管你是否真的有一个操作栏。

我最初的目标是能够在 Honeycomb 及更高版本上使用旧式面板菜单和新的操作栏菜单(在不同的 Activity 中),同时在 Honeycomb 下面的任何地方使用面板菜单。

原因是有一个 Activity 需要有大菜单按钮,但是应用程序的其余部分可以完美地全息化。

为了实现这一点,我在所有地方都使用了 Theme.Holo(适用于 api 11+),除了这个我使用 Theme.NoTitlebar 的 Activity 。我有 android:minSdkVersion="5"android:targetSdkVersion="14",所以不显示支持菜单键(因此不会在一些新的 HTC 手机上浪费屏幕空间)。如果设备没有硬件菜单按钮,我会提供自己的按钮来弹出面板菜单(通过 http://developer.android.com/reference/android/view/ViewConfiguration.html#hasPermanentMenuKey () )

问题是,这在 Honeycomb 平板电脑(Galaxy Tab、Honeycomb 3.2)上不起作用。使用操作栏的正常 Activity 工作正常,但在特殊 Activity 中,当我按下菜单按钮(我在 UI 中提供的那个)时没有任何反应。

这在至少 2 个 ICS 手机和模拟器(有和没有硬件菜单键)上都可以正常工作。正常的操作栏菜单无处不在,除了这个 Activity ,我在那里获得了大面板菜单。

那么解决方案是什么?这是 Galaxy Tab 还是 Honeycomb 的问题?我应该使用不同的主题来提供面板菜单吗?

编辑:我买了一个 ICS 平板电脑进行更多测试,发现面板菜单也没有出现。 因此,在相同版本的 Android 上,完全相同的应用程序将在手机上显示面板菜单,而在平板电脑上什么也没有。嗯?

最佳答案

以下是 Honeycomb 及以上 Android 版本的 PhoneWindow 系统类的摘录。它实际上是针对 Android 目标版本和设备屏幕尺寸的硬编码检查。您能否避免此检查 - 菜单会正常显示。但是没有这种可能。这就是为什么无法在目标 sdk 设置为 10 以上的值的 Honeycomb+ 设备上显示选项菜单的原因。有趣的是,如果可以显示操作栏菜单,它将更早显示,并且永远不会达到此代码。因此,代码上方的注释看起来特别 mock 。

// Don't open an options panel for honeycomb apps on xlarge devices.
// (The app should be using an action bar for menu items.)
if (st.featureId == FEATURE_OPTIONS_PANEL) {
    Context context = getContext();
    Configuration config = context.getResources().getConfiguration();
    boolean isXLarge = (config.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) ==
                 Configuration.SCREENLAYOUT_SIZE_XLARGE;
    boolean isHoneycombApp = context.getApplicationInfo().targetSdkVersion >=
            android.os.Build.VERSION_CODES.HONEYCOMB;

    if (isXLarge && isHoneycombApp) {
        return;
    }
}

关于android - 如何在没有操作栏的情况下在 Honeycomb 上显示选项菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13966017/

相关文章:

Android 操作栏图标总是溢出

android - 如何自定义 float ActionBar的背景?

android - 如何实现隐藏菜单

android - 切换 onCheckedChangedListner 不在工具栏菜单内注册点击

Android从xampp/wamp数据库获取数据

java - 设计两列 Android 应用程序 - 切换 View ?

android - 使用未发布的 bintray Artifact

android - 根据所选选项卡显示和隐藏 ActionBar 中的项目

android - 带有菜单按钮的手机上 ActionBar 的正确用户体验?

java - 是否可以找到附近的其他电话?