最忌比較煩,比較煩,比你煩。
罵了隔壁的,整個帶圖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。
看到這裏,心裏一驚,摟一眼AS的默認主題,Theme.AppCompat.Light.DarkActionBar
改吧,改成@android:style/Theme.Light
懶得去看默認的時哪個了,反正不是HOLO就是material。
到此爲止,各位看官,使用的時候注意一下。