zoukankan      html  css  js  c++  java
  • 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溢出菜单

  • 相关阅读:
    杂项
    导出查询数据(大数据量)
    设置现有字段自增
    C++ 矩形交集和并集的面积-离散化
    Python使用flask架构、跨域
    匈牙利命名法
    C++ main函数
    windows编译boost
    mfc HackerTools监控键盘按键
    mfc HackerTools远程线程注入
  • 原文地址:https://www.cnblogs.com/adison/p/3761248.html
Copyright © 2011-2022 走看看