Android怎么更换背景色,android – 更改弹出菜单背景颜色

我对接受的答案不满意,因为它没有真正解释为什么OPs自定义弹出式样式没有应用 – 不仅仅是背景,还有文字颜色等 – 所以我做了自己的实验.

重要的是要注意工具栏创建的弹出窗口(当它有菜单项时)和使用PopupMenu自己显示的弹出窗口之间存在差异.这些由不同的主题属性控制.另外,请注意有两个PopupMenu类:android.widget.PopupMenu和android.support.v7.widget.PopupMenu.

你明确显示的PopupMenus样式所需的主题属性是android:popupMenuStyle或popupMenuStyle.您有几个选项可以正确应用自定义样式:

(1)在活动(或应用程序)的主题中使用android:popupMenuStyle

@style/PopupMenu

@style/PopupMenu

@color/popupBackground

PopupMenu popup = new PopupMenu(this, anchorView);

请注意,在布局文件中不需要额外的内容.

(2)使用ContextThemeWrapper

@style/PopupMenu

@style/PopupMenu

@color/popupBackground

ContextThemeWrapper ctw = new ContextThemeWrapper(this, R.style.CustomPopupTheme);

PopupMenu popup = new PopupMenu(ctw, anchorView);

注意在构造ContextThemeWrapper时,如何不直接使用R.style.PopupMenu.这看起来有点迂回,但是如果你想让弹出主题与活动或应用主题分开(例如,可能只有一些弹出窗口需要你的特殊主题),它会很有用.

(3)使用AppBarLayout的上下文

@style/PopupMenu

@style/PopupMenu

@color/popupBackground

@color/popupBackground

android:id="@+id/appbar"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:theme="@style/AppBarOverlay">

android:id="@+id/toolbar"

android:layout_width="match_parent"

android:layout_height="?attr/actionBarSize"

android:background="?attr/colorPrimary"

app:popupTheme="@style/PopupOverlay"/>

AppBarLayout appBar = (AppBarLayout) findViewById(R.id.app_bar);

PopupMenu popup = new PopupMenu(appBar.getContext(), anchorView);

由于您已经拥有AppBar的主题叠加层,因此您可以使用它来保存弹出式主题参考.这也适用于工具栏的上下文,至少考虑到当前的布局,但请注意app:popupTheme在这里实际上并不相关,因为它影响工具栏的弹出窗口,而不是PopupMenu.还要注意这与上面的选项2有多相似,这应该让你了解android:theme属性如何在引擎盖下工作;)

在我的实验中,android:itemBackground仅在我使用PopupOverlay样式代替android:colorBackground时才起作用.但是,最好使用android:colorBackground,因为这会改变弹出窗口的颜色,使圆角和可选项突出显示/纹理完整.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值