如何强制操作栏溢出图标显示

时间:2013-12-07 17:55:31

标签: android android-actionbar

我想强制溢出图标始终显示在操作栏中(假设有溢出项)。在带有菜单按钮的型号上,有时不会出现溢出图标,用户必须点击设备菜单按钮才能获得其余的操作菜单项。用户一直在抱怨这一点。

请注意,对于上下文菜单,无论设备是否具有内置菜单按钮,都会显示溢出图标。

我意识到强制溢出图标出现在操作栏中会复制“物理”图标的功能。您可能会认为违反了Androids设计指南。但在我看来,用户赢了。他们说这令人困惑,我相信他们是对的。

2 个答案:

答案 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>