是否可以將彈出式菜單樣式從白色背景上的默認黑色文本更改爲黑暗背景,而無需將樣式應用於整個活動(這打破了我的UI)?如何設計PopupMenu?
回答
是的,你可以
<style name="YOURSTYLE" parent="Widget.AppCompat.PopupMenu">
<item name="android:textColor">@android:color/white</item>
<item name="android:itemBackground">@android:color/holo_red_light</item>
</style>
而且
Context wrapper = new ContextThemeWrapper(this, R.style.YOURSTYLE);
PopupMenu popup = new PopupMenu(wrapper, view);
結果
您不能直接設置PopupMenu
樣式,但還有其他方法。
PopupMenu
創建方式如下:
PopupMenu popupMenu=new PopupMenu(context, anchorView);
菜單的樣式由上下文傳遞的風格決定的。所以你所要做的就是傳遞你的Activity
參考作爲上下文,菜單將被相應地設置。
如果要定義自己的風格,從默認的一個繼承你的活動方式和覆蓋以下項目:
<style name="style" parent="android:Theme.Holo.Light">
<item name="android:popupMenuStyle">...</item>
<item name="android:popupAnimationStyle">...</item>
<item name="android:popupBackground">...</item>
<!-- etc etc -->
</style>
什麼值代替「....」。 我試過------------------------
@Santosh checkout http://stackoverflow.com/questions/22320663/change-background-popupmenu-in-android –
添加到什麼Deville建議,你也可以添加以下屬性你的主題風格。
在我的XML樣式定義在上面的樣式定義<style name="myPopupMenuStyle" parent="@style/Widget.AppCompat.Light.PopupMenu">
</style>
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">#000000</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
<item name="android:textColor">#000000</item>
</style>
引用你會發現程序兼容性
<style name="style" parent="android:Theme.Holo.Light">
<!-- other attributes -->
<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
<item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>
</style>
其他風格,那是因爲我使用的是Android的支持庫目標下的Android API級別。
使用ActionBar
的同樣情況下創建PopupMenu
actionBar.getThemedContext()
所以,
ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
PopupMenu popMenu = new PopupMenu(actionBar.getThemedContext(), someView);
你假設使用Actionbar。彈出窗口可以在沒有操作欄的情況下使用。 – AndroidDev
即使使用工具欄,如果它設置爲支持Actionbar,它也可以很好地工作。謝謝。 – buggydroid
可以很明顯的定製的彈出菜單中你自己辦法。它非常簡單。但首先你需要照顧一件非常重要的事情。
的彈出菜單是這樣的創建,
PopupMenu popupMenu = new PopupMenu(context, anchorView);
現在的「語境」在這裏扮演的造型非常重要的作用。 PopupMenu的風格取決於您傳遞的上下文的樣式。所以要非常小心。我幾乎花了半小時才弄清楚這一點。
如果你在一個片段只是通過「getActivity()」,你就完成了。
造型的彈出菜單項
只是覆蓋在你的風格以下項目,
<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
和定製你想要的文本外觀,
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
<item name="android:textColor">@color/text_hint_color</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
<item name="android:textColor">@color/text_hint_color</item>
</style>
如果你想改變PopupMenu的背景,這樣做
<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
<item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>
高級造型
的彈出菜單項不支持默認顯示的圖標。但顯示圖標可以使它看起來好多了。我建議嘗試一下。
爲了實現這個剛剛把下面的代碼在你的活動,你是好去,
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
try {
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
} catch (NoSuchMethodException e) {
Log.e("tag", "onMenuOpened", e);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
return super.onMenuOpened(featureId, menu);
}
希望它可以幫助大家。謝謝。
啓用圖標的這種實現方式並不適用於我,所以請參閱本文後面的dgtale的回答:http://stackoverflow.com/questions/6805756/is-it-possible-to-display-icons-in-a-popupmenu – Ivan
- 1. JComboBox的設置大小PopupMenu
- 2. PopupMenu RuntimeException
- 3. 如何將Android PopupMenu的背景設置爲白色
- 4. 如何使用theme.xml和style.xml設置PopupMenu和AlertDialog的樣式
- 5. 設置PopupMenu的菜單項編程
- 6. 如何更改PopupMenu背景的顏色
- 7. 如何關閉WinRT中的PopupMenu
- 8. 如何更改PopupMenu中RadioButton的顏色?
- 9. 如何去做一個顛倒的PopupMenu
- 10. 如何調用AsyncTask中的PopupMenu項目
- 11. Gtk.StatusIcon PopupMenu python
- 12. Dialog vs. PopupMenu
- 13. 的PopupMenu從supportlibrary
- 14. ActionSherlockBar造型 - PopupMenu
- 15. 更新JComboBox popupMenu
- 16. AppCompat v21 PopupMenu風格
- 17. 的PopupMenu在Gtk#的
- 18. 如何升級設計2.1.2設計3.2.2
- 19. 如何設計UISegmentedControll?
- 20. 如何設計QWidget?
- 21. 如何設計它?
- 22. 如何從設計
- 23. 如何設計ViewModel
- 24. 如何設計類
- 25. XML設計 - 如何?
- 26. 如何設計UILabel?
- 27. 如何設計與
- 28. 如何設計Bootstrap?
- 29. 我使用ShareActionProvider在PopupMenu的,但顯示兩個PopupMenu的?
- 30. POPUPMENU造型在WinRT中
我做的東西simil在這裏! http://stackoverflow.com/questions/16621070/get-context-of-popupmenu-like-contextmenu – toobsco42