menu IconMenuView ExpandedMenuView

最忌比较烦,比较烦,比你烦。

骂了隔壁的,整个带图menu,为鸡毛的显示出来不带图。。为鸡毛啊???

因为主题这个大SB~~~~~~


发送menu按键(注意是发送,不时点击),弹出menu,这个menu在整个decorview的最底下,居中显示。

这个吊过程时咋整的?为毛显示在最底下?为毛menu的xml里有图片不给我显示?我欠你钱了是吗?


一、先看看咋写的demo,是不是自己有病,说医生疯了?

menu的xml,有title有图片

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_settings"
        android:title="Search Settings"
        android:icon="@mipmap/ic_launcher"
        android:alphabeticShortcut='P'
    />

</menu>
代码:解析一哈

@Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        menu.clear();
        MenuInflater inflater = new MenuInflater(getApplicationContext());
        inflater.inflate(R.menu.settings, menu);

        return true;
    }
完了,尼玛嗨啊,显示出来。。。我的图片呢。。。



烦,真特么烦。。。为鸡毛人家的就有。

二、去死吧WMS(PhoneWindow)

显不显示,都肯定有代码能控制吧。。。先用hierachy撸一眼,看看。

发现,用的是ExpandedMenuView,尼玛嗨~~~。这个时无图的。

可是,为鸡毛啊,怀疑人生啊,我特么就写个menu,你凭什么决定给我用什么menu啊~~~

强撸灰飞烟灭,那就撸吧~

Menu,算个window(如果不知道,辣么,你此时就该记住了),辣么,就是该死的WMS搞的鸡毛。

皮皮虾,我们走,干WMS去。首先,你要去百度一下PanelFeatureState,这个逼就是祸害,弄死他,你就翻盘了。

索性,小弟我百度的给你看吧,写的嗨挺吊的:http://blog.csdn.net/siobhan/article/details/8450173

辣么好,知道怎么起的menu了,辣么哪里决定的起什么样的menu呢? IconMenuView OR ExpandedMenuView

    protected boolean initializePanelContent(PanelFeatureState st) {
....

        MenuView menuView = st.isInListMode()
                ? st.getListMenuView(getContext(), mPanelMenuPresenterCallback)
                : st.getIconMenuView(getContext(), mPanelMenuPresenterCallback);
本文只关注,两种样式,WMS如何抉择的,并不关注其他。所以取其精华,去TMD没用的代码。

看到,是一个判断决定的:小弟不才,靠打log为生~~~

        public boolean isInListMode() {
            Log.d(TAG,"isInListMode isInExpandedMode: "+isInExpandedMode+", isCompact: "+isCompact);
            return isInExpandedMode || isCompact;
        }
这里的isCompact为true了,导致的使用ListMenuView。

辣么就好搞了啊,在搜一下,哪里赋值就哦了。

        void setStyle(Context context) {
            TypedArray a = context.obtainStyledAttributes(R.styleable.Theme);
            ...
            isCompact = a.getBoolean(
                    R.styleable.Theme_panelMenuIsCompact, false);
            ...
            a.recycle();
        }
搁主题里弄得。。。

辣么,看下啥子主题才是false吧。。除了theme,holo和meterial都是true。

H A D themes_holo.xml 236 <item name="panelMenuIsCompact">true</item>
577 <item name="panelMenuIsCompact">true</item>
H A D themes.xml 238 <item name="panelMenuIsCompact">false</item>
H A D themes_material.xml 206 <item name="panelMenuIsCompact">true</item>
567 <item name="panelMenuIsCompact">true</item>

看到这里,心里一惊,搂一眼AS的默认主题,Theme.AppCompat.Light.DarkActionBar
改吧,改成@android:style/Theme.Light

懒得去看默认的时哪个了,反正不是HOLO就是material。

到此为止,各位看官,使用的时候注意一下。









發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章