Android的ActionBar如何强制显示OverFlow图标

在有的Android的App中,若ActionBar中的菜单项过多,会显示一个OverFlow图标(有三个纵向的点)如下图所示:

4.1.2-android-weixin-micromsg-also-show-three-dot-settings-menu_thumb

比较遗憾的是,这个图标的显示,与Android版本以及Menu项的数目相关。

如何强制显示这个Overflow图标呢?

经过查找,有如下两种方案。

1、进行Hack

在onCreate中添加如下Hack代码

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
}

比较遗憾的是,上述所使用的sHasPermanentMenuKey并未在官方文档中提及,也就是说,在未来很可能被废弃。

2、将一个MenuItem“伪装”成Overflow图标

如下所示,我们可以设置一个父子菜单,然后对父菜单设置icon,来完成同样的功能。

<?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android" >


<item
    android:id="@+id/saveDetails"
    android:showAsAction="always"
    android:title="@string/save"/>

<item
    android:id="@+id/menu_overflow"
    android:icon="@drawable/dts"
    android:orderInCategory="11111"
    android:showAsAction="always">
    <menu>
        <item
            android:id="@+id/contacts"
            android:showAsAction="never"
            android:title="Contacts"/>


        <item
            android:id="@+id/service_Tasks"
            android:showAsAction="never"
            android:title="Service Tasks"/>


        <item
            android:id="@+id/charge_summary"
            android:showAsAction="never"
            android:title="Charge Summary"/>


        <item
            android:id="@+id/capture_signature"
            android:showAsAction="never"
            android:title="Capture Signature"/>
    </menu>
</item>

</menu>

这样搞完后,有个缺点,就是submenu会在屏幕顶部显示,而不是actionbar底部显示,经过查询,可以按照这样的方法进行处理,即单独添加submenu。

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *