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。

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









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