我想强制溢出图标始终显示在操作栏中(假设有溢出项)。在带有菜单按钮的型号上,有时不会出现溢出图标,用户必须点击设备菜单按钮才能获得其余的操作菜单项。用户一直在抱怨这一点。
请注意,对于上下文菜单,无论设备是否具有内置菜单按钮,都会显示溢出图标。
我意识到强制溢出图标出现在操作栏中会复制“物理”图标的功能。您可能会认为违反了Androids设计指南。但在我看来,用户赢了。他们说这令人困惑,我相信他们是对的。
答案 0 :(得分:58)
恭喜!你赢了!
从Android 4.4开始,无论设备是否有物理MENU按钮,操作栏中的......功能都将存在。谷歌目前的Compatibility Definition Document现在更有力地反对拥有一个专用的菜单按钮。
开发人员过去使用的黑客行为是:
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if (menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
}
catch (Exception e) {
// presumably, not relevant
}
在Android 4.4+上不应该这样做,虽然有了异常处理程序,如果你运行它,我不会指望任何特殊问题,并且总有一天它们会完全摆脱sHasPermanentMenuKey
。
就我个人而言,我仍然不会改变Android 4.3及以下版本的内容,因为我怀疑这是一个非常糟糕的情况,在这种情况下,您将更换关于没有菜单的抱怨,抱怨有相同菜单的重复版本。话虽如此,由于这是现在正式认可的行为,我对开发人员的目标是在旧设备上保持一致性没有问题。
向the commenter on the issue I filed提出有关此事的小费,指出了这一变化。
答案 1 :(得分:25)
这可能是另一项工作,这对我有帮助。保留一个可绘制的三个点并将其作为菜单项。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/saveDetails"
app:showAsAction="always"
android:title="@string/save"/>
<item
android:id="@+id/menu_overflow"
android:icon="@drawable/dts"
android:orderInCategory="11111"
app:showAsAction="always">
<menu>
<item
android:id="@+id/contacts"
app:showAsAction="never"
android:title="Contacts"/>
<item
android:id="@+id/service_Tasks"
app:showAsAction="never"
android:title="Service Tasks"/>
<item
android:id="@+id/charge_summary"
app:showAsAction="never"
android:title="Charge Summary"/>
<item
android:id="@+id/capture_signature"
app:showAsAction="never"
android:title="Capture Signature"/>
</menu>
</item>
</menu>