【发布时间】:2012-09-20 02:35:23
【问题描述】:
是否可以将弹出菜单样式从白色背景上的默认黑色文本更改为深色背景而不将样式应用于整个活动(这会破坏我的 UI)?
【问题讨论】:
-
我在这里做类似的事情!!! stackoverflow.com/questions/16621070/…
是否可以将弹出菜单样式从白色背景上的默认黑色文本更改为深色背景而不将样式应用于整个活动(这会破坏我的 UI)?
【问题讨论】:
是的,你可以
<style name="YOURSTYLE.PopupMenu" 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);
PopupMenu popup = new PopupMenu(wrapper, view);
结果
【讨论】:
我对弹出菜单的样式与其他人略有不同。
所以,我创建了一个样式
<style name="AppTheme.PopupMenu" parent="Widget.AppCompat.PopupMenu">
<item name="android:textColor">@color/textContrast</item>
<item name="android:textColorSecondary">@color/text</item>
</style>
我正在使用工具栏
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
并像这样设置弹出样式
toolbar.setPopupTheme(R.style.AppTheme_PopupMenu);
【讨论】:
使用ActionBar 的相同上下文来创建PopupMenu
actionBar.getThemedContext()
所以,
ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
PopupMenu popMenu = new PopupMenu(actionBar.getThemedContext(), someView);
【讨论】:
除了Deville 建议的内容外,您还可以将以下属性添加到您的主题样式中。
<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>
上述样式定义中引用的其他样式
<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>
您会在我的 xml 样式定义中注意到 AppCompat,这是因为我正在使用 android 支持库来定位较低的 android API 级别。
【讨论】:
你不能直接设置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>
【讨论】: