FEATURE_NO_TITLE也会删除菜单

时间:2013-11-23 23:19:32

标签: android android-layout

我创建了一个自定义菜单栏。没有什么复杂的只是一个LinearLayout,它包含六个ImageButtons,因为默认的Android标题菜单对我的应用来说太不一致了。由于不一致,我的意思是顶部显示的按钮数量因设备而异。 要隐藏android标题栏,我在styles.xml中设置以下内容

 <style name="AppTheme" parent="AppBaseTheme">
    <item name="android:windowNoTitle">true</item>
</style>

在我的menu.xml中,我还将“showAsAction”参数设置为“never”

   <item
    android:id="@+id/menu_settings"
    android:showAsAction="never"
    android:title="@string/my_menu_settings"/>

一切都很好。我测试了我的应用: - 华硕Transformer tf300 - 三星Galaxy Note 2 - 三星Galaxy S3 - Lg Optimus 4x Hd P880 - 三星Galaxy Ace - 多个仿真器 - 还有一些......

但是今天我在我的全新索尼Xperia Z1上测试了我的应用程序。 问题在于,当我单击菜单按钮(三个默认的android按钮之一 - &gt;返回,主页和菜单)时,菜单不会显示。 设备返回应用列表。没有菜单打开!

我的问题是: 我的方法有问题吗? 我只是在我的Xperia Z上注意到了这种行为,但我不确定我的代码中是否存在完全错误,还有更多设备受到影响......

更新: 我试图覆盖:onKeyUp和onKeyDown但是没有调用这些方法。我的onCreateOptionsMenu中的断点也没有被击中。

2 个答案:

答案 0 :(得分:0)

  

默认的Android标题菜单

它被称为操作栏。

  

不一致我的意思是顶部显示的按钮数量因设备而异。

这是设计上的。 Android设备有各种各样的屏幕尺寸。

  

我的方法有问题吗?

溢出是操作栏的一个功能。即使您在某些设备上隐藏操作栏,它也会发生。但是,特别是在缺少专用MENU按钮的设备上,如果隐藏操作栏,则溢出将不可用。

因此,如果您要隐藏操作栏,那很好,但是您需要实现自己的菜单系统,即游戏和其他应用程序的方式。

答案 1 :(得分:0)

还发现了这个:

 boolean hasMenu = ViewConfiguration.get(this).hasPermanentMenuKey();
        if(!hasMenu){
            //getWindow().setFlags(0x08000000, 0x08000000);
            try {
                     getWindow().addFlags(WindowManager.LayoutParams.class.getField("FLAG_NEEDS_MENU_KEY").getInt(null));
              }
              catch (NoSuchFieldException e) {
                // Ignore since this field won't exist in most versions of Android
              }
              catch (IllegalAccessException e) {
                Log.w("Optionmenus", "Could not access FLAG_NEEDS_MENU_KEY in addLegacyOverflowButton()", e);
              }
        }

这里: How to show option menu in android 4.2

你怎么看? 似乎可以在我的Xperia上工作。

更新: 但不适用于Nexus 10,华硕Transformer TF 300。 传统菜单已存在但无效。

最终解决方案: - &gt;基于PopupWindow创建了我自己的菜单