我创建了一个自定义菜单栏。没有什么复杂的只是一个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中的断点也没有被击中。
答案 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创建了我自己的菜单