ActionBar 溢出菜单和兼容问题解决
当我们想做一个类似于微信菜单
很快我们应该可以想到可以用support-v7包或者actionbarshecklock,然后就写menu布局,如下
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- add submenu -->
<item
android:id="@+id/menu_add"
android:icon="@drawable/actionbar_add_icon"
android:showAsAction="always"
android:title="@string/description">
<menu>
<item
android:icon="@drawable/actionbar_camera_icon"
android:showAsAction="ifRoom|withText"
android:title="拍照"/>
<item
android:icon="@drawable/actionbar_facefriend_icon"
android:showAsAction="ifRoom|withText"
android:title="群聊"/>
<item
android:icon="@drawable/actionbar_particular_icon"
android:showAsAction="ifRoom|withText"
android:title="我的微信"/>
<item
android:icon="@drawable/actionbar_search_icon"
android:showAsAction="ifRoom|withText"
android:title="搜索"/>
</menu>
</item>
<!-- more submenu -->
<item
android:id="@+id/menu_more"
android:icon="@drawable/actionbar_more_icon"
android:showAsAction="ifRoom"
android:title="@string/description">
<menu>
<item
android:icon="@drawable/ofm_add_icon"
android:showAsAction="ifRoom|withText"
android:title="添加"/>
<item
android:icon="@drawable/ofm_card_icon"
android:showAsAction="ifRoom|withText"
android:title="银行卡"/>
<item
android:icon="@drawable/ofm_collect_icon"
android:showAsAction="ifRoom|withText"
android:title="我的收藏"/>
<item
android:icon="@drawable/ofm_delete_icon"
android:showAsAction="ifRoom|withText"
android:title="删除"/>
</menu>
</item>
</menu>
然后就是在onCreateOptionsMenu中调用一下menu布局,貌似一切都大功告成了,在类似于nexus5这样的机子跑起来貌似也没啥问题,但当你在魅族机子上面跑起来的时候会发现出现很奇怪的现象,如下图
个人猜测,魅族这类机子对菜单键进行了定制,对溢出菜单会有自己的一些处理方式,那么怎么解决这个问题,而且使用这种传统做法,你会发现subMenu之 恩只能添加icon和title,而不能实现类似微信那种除了icon和title,还有小红点的效果,这时候可以考虑用ActionProvider。
ActionProvider官方文档解释为为单个menu控件定义丰富的menu交互。。。。。这恰恰是我想要的。。。
要使用ActionProvider,首先要继承ActionProvider写一个自定义的ActionProvider类,这个可以参考 ShareActionProvider。然后通过android:actionProviderClass属性在menu布局里导入。
利用ActionProvider,我们可以实现和刚才一模一样的效果,而且不会出现那魅族兼容的问题,我们只需要在onPrepareSubMenu 方法里面进行一些操作就行了,当然我们用ActionProvider还可以实现更复杂的效果,因为它里面的ActionView可以完全自定义,我们只 需要在onCreateActionView做对应处理就行;譬如说我们就要简单实现类似微信一样除了icon和title,还有小红点的效果,具体见 demo,在此不详述。。。
demo地址:仿微信 actiobar溢出菜单