我希望强制在操作栏中始终显示溢出图标(假设有溢出项)。 在配备菜单按钮的型号上,有时不会出现溢出图标,用户必须点击设备的菜单按钮才能获取其余的操作菜单项。 用户一直在抱怨这件事。
请注意,对于上下文菜单,无论设备是否具有内置菜单按钮,溢出图标始终显示。
我意识到强制在操作栏中显示溢出图标将重复“物理”图标的功能。 你可能认为这违反了Android的设计准则。 不过,在我看来,用户是赢家。 他们说这很令人困惑,我相信他们是正确的。
我希望强制在操作栏中始终显示溢出图标(假设有溢出项)。 在配备菜单按钮的型号上,有时不会出现溢出图标,用户必须点击设备的菜单按钮才能获取其余的操作菜单项。 用户一直在抱怨这件事。
请注意,对于上下文菜单,无论设备是否具有内置菜单按钮,溢出图标始终显示。
我意识到强制在操作栏中显示溢出图标将重复“物理”图标的功能。 你可能认为这违反了Android的设计准则。 不过,在我看来,用户是赢家。 他们说这很令人困惑,我相信他们是正确的。
恭喜你!你赢了!
从Android 4.4开始,无论设备是否有物理MENU按钮,操作栏中的...提示都将存在。 Google目前的兼容性定义文件对于使用专用MENU按钮表达功能做出更强硬的反对。
开发人员过去使用的窍门是:
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及以下版本中仍然不会更改任何内容,因为我认为这是一个"打地鼠"的情况,您会用没有菜单的投诉来代替同一个菜单的重复版本的投诉。话虽如此,由于这是从现在开始正式支持的行为,我对开发人员在旧设备上追求一致性没有问题。
向 我提交的问题的评论者 致敬,他指出了这个变化。
这可能是另一种解决方法,对我非常有帮助。保留一个带有三个点的drawable并将其作为菜单项。
<?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>