如何修改Android选项菜单背景色并解决Toolbar上下出现空白的问题
哈哈,这个问题我之前也碰到过!你设置了选项菜单的item背景,但忽略了整个Popup窗口的背景和默认边距,所以才会出现Toolbar上下的空白区域,给你几个解决办法:
解决Toolbar选项菜单上下空白的问题
方案一:调整主题样式(最推荐)
直接修改你的ThemeOverlay.MyTheme,补充设置Popup窗口的背景和边距属性,让整个菜单的背景统一:
<style name="ThemeOverlay.MyTheme" parent="ThemeOverlay.AppCompat.Light"> <!-- 保留你原有的自定义设置 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="android:textColor">@color/white</item> <item name="android:itemBackground">@color/black</item> <!-- 新增这几个属性,消除窗口空白 --> <item name="android:popupBackground">@color/black</item> <item name="android:windowBackground">@color/black</item> <item name="android:padding">0dp</item> </style>
原理是:你之前只设置了每个菜单项的背景,但Popup菜单本身的窗口还有默认的背景色和内边距,补充这几个属性后,整个菜单的背景就和item背景完全一致,空白自然就消失了。
方案二:更换父主题
如果方案一没生效,可能是ThemeOverlay.AppCompat.Light自带了一些默认的样式,你可以换成更基础的父主题试试:
<style name="ThemeOverlay.MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 同样的属性设置 --> <item name="colorPrimary">@color/colorPrimary</item> <item name="android:textColor">@color/white</item> <item name="android:itemBackground">@color/black</item> <item name="android:popupBackground">@color/black</item> <item name="android:windowBackground">@color/black</item> <item name="android:padding">0dp</item> </style>
方案三:代码里手动设置PopupMenu
如果主题调整还是不行,那就直接在代码里控制PopupMenu的背景:
// 假设你的Toolbar菜单按钮id是action_menu,或者通过Toolbar获取菜单触发事件 View menuTrigger = findViewById(R.id.action_menu); menuTrigger.setOnClickListener(v -> { PopupMenu popupMenu = new PopupMenu(this, v); popupMenu.inflate(R.menu.your_menu_layout); // 替换成你的菜单布局 // 强制设置Popup的背景 if (popupMenu.getPopup() instanceof MenuPopupHelper) { MenuPopupHelper menuHelper = (MenuPopupHelper) popupMenu.getPopup(); menuHelper.setBackgroundDrawable(getResources().getDrawable(R.color.black)); menuHelper.setForceShowIcon(true); // 可选,需要显示菜单图标的话打开这个 } popupMenu.show(); });
内容的提问来源于stack exchange,提问作者skypore
相关产品推荐
相关产品推荐

