1

如何在 Honeycomb 或 ICS 平板电脑上显示选项菜单,而没有操作栏?

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

总之,在 Honeycomb 中,如果您没有操作栏,则没有选项菜单,除非您的目标低于 11。这似乎是一个错误。在 ICS 及更高版本中,无论您是否真的有操作栏,您都可以拥有任何您喜欢的选项菜单。

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

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

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

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

这在至少 2 部 ICS 手机和模拟器上运行良好(有和没有硬件菜单键)。除了在这个活动中,我得到大面板菜单之外的所有地方的正常操作栏菜单。

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

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

4

1 回答 1

2

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

// 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;
    }
}
于 2013-07-06T14:50:24.203 回答