当我们想做一个类似于微信菜单

很快我们应该可以想到可以用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溢出菜单

ActionBar 溢出菜单和兼容问题解决的更多相关文章

  1. Open Sans字体兼容问题解决办法[font-face]

    参考:http://www.tantengvip.com/2014/11/open-sans/ 1.font-face使用方法 font-face是CSS3中的一个模块,主要是把自定义的Web字体嵌入 ...

  2. Android ActionBar详解(二)--->使用ActionBar显示选项菜单

    MainActivity如下: package cc.testsimpleactionbar1; import android.os.Bundle; import android.app.Activi ...

  3. WPF中不规则窗体与WebBrowser控件的兼容问题解决办法

    原文:WPF中不规则窗体与WebBrowser控件的兼容问题解决办法 引言 这几天受委托开发一个网络电视项目,要求初步先使用内嵌网页形式实现视频播放和选单,以后再考虑将网页中的所有功能整合进桌面程序. ...

  4. Android的Toolbar(含溢出菜单设置[弹出菜单的使用])的使用PopMenu的样式

    http://blog.csdn.net/yingtian648/article/details/52432438(转载) 1.在Toolbar.xml中设置弹出菜单的风格(app:popupThem ...

  5. Xamarin.Android之ActionBar与菜单

    一.选项卡 如今很多应用都会使用碎片以便在同一个活动中能够显示多个不同的视图.在Android 3.0 以上的版本中,我们已经可以使用ActionBar提供的Tab来实现这种效果,而不需要我们自己去实 ...

  6. Android Training精要(一)ActionBar上级菜单导航图标

    Navigation Up(ActionBar中的上级菜单导航图标) 在android 4.0中,我们需要自己维护activity之间的父子关系. 导航图标ID为android.R.id.home @ ...

  7. Easyui1.3.4+IIS6.0+IE8兼容问题解决

    刚刚学习JQuery Easyui,就遇到了拦路虎,最新版本1.3.4下载下来部署到win2003 + IIS6.0中发现所有demo都不可以渲染,IE8提示错误如下: 详细内容如下: 用户代理: M ...

  8. 博创arm板编译内核makefile不兼容问题解决

    导致这种结果的是:Make工具对低版本内核的Makefile一些旧的规则兼容不好,我们只需修改对应的Makefile. 改1:: 原始的:          大概在 1503行 / %/: prepa ...

  9. JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结 【转】http://blog.csdn.net/uniqer/article/details/7789104

    1.兼容firefox的 outerHTML,FF中没有outerHtml的方法. 代码如下: if (window.HTMLElement) { HTMLElement.prototype.__de ...

随机推荐

  1. shell脚本分析mysql慢查询日志(slow log)

    使用percona公司的pt-query-digest分析慢查询日志.分析.统计的结果的比較清晰 #!/bin/sh slowlog_path=/root/slow_query_log everysl ...

  2. C++再次理解虚表

    #include <iostream> using namespace std; class Base { public: virtual void fun1() { cout <& ...

  3. MVC入门——增

    创建数据库表如下: 生成EF模型 //------------------------------------------------------------------------------ // ...

  4. 【计蒜客2017NOIP模拟赛1】

    D1T1 题面 题解:一开始以为傻题,旋转个坐标系就行了,结果光荣爆零~ 结果发现旋转坐标系后,由于多了一些虚点,锤子砸到虚点上了~gg [没有代码] D1T2 题面 题解:计算出每个边对答案的贡献即 ...

  5. Interface AutoCloseable

    https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html https://docs.oracle.com/javase ...

  6. 删除SVN账号

    删除里面的所有文件   C:\Users\Administrator\AppData\Roaming\Subversion\auth

  7. appium(6)-parts of appium api

    parts of appium api Lock Lock the screen.//锁屏. // java driver.lockScreen(3); // objective c [driver ...

  8. HBase开发

    MapReduce接口 HBase提供了TableInputFormat.TableOutputFormat.TableMapper和TableReducer类来支持使用MapReduce框架处理HB ...

  9. cookie VS sessionstorge VS localstorge

    虽然cookie , localstorge , sessionstorge三者都有存储的功能,但是还是有区别, git上地址:https://github.com/lily1010/cookie-s ...

  10. querySelectorAll和getElementsBy 系列比较

    querySelectorAll 相比下面这些方法有什么区别? (1)getElementsByTagName (2)getElementsByClassName (3)getElementsByNa ...