You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Material Design 1.5.0 Toolbar菜单内边距颜色修改与移除方法

问题描述

自有应用迁移至 Material Design 1.5.0 版本后,Toolbar 弹出的菜单项列表出现异常灰色上下内边距/边框,需要修改该区域显示颜色,或直接移除多余内边距。

原有实现代码

  • Activity 布局中引入通用 Toolbar 布局:
<include layout="@layout/toolbar_default" />
  • toolbar_default.xml 布局文件代码:
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.appbar.MaterialToolbar
    ...
    app:theme="@style/defaultToolbarTheme"
    ...
    />
  • 关联 styles 样式定义:
<style name="defaultToolbarTheme" parent="Theme.MaterialComponents.NoActionBar">
    <item name="android:textColorPrimary">?app_toolbar_foreground_color</item>
    <item name="android:textColorSecondary">?app_toolbar_foreground_color</item>
    <item name="android:background">@drawable/item_background_menu</item>
    <item name="android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>
</style>

<style name="MyActionBar.MenuTextStyle" parent="TextAppearance.AppCompat.Widget.ActionBar.Subtitle" />
  • 菜单背景选择器 item_background_menu.xml:
<selector>
    <item android:drawable="@color/blue_click" android:state_pressed="true"/>
    <item android:drawable="@drawable/item_background_menu_drawable"/>
</selector>
  • 菜单背景形状资源 item_background_menu_drawable.xml:
<shape>
    <solid android:color="@color/itemColor"/>
</shape>
  • 颜色定义:
<color name="itemColor">#1155a2</color>

效果对比

  • 迁移前正常菜单效果:
    迁移前菜单效果
  • 迁移后异常效果(上下区域显示系统默认灰色):
    迁移后菜单效果

解决方案

该问题是 Material Components 1.5.0 版本调整了弹出菜单(MaterialMenuPopup)默认样式导致的,新版本给弹窗容器新增了默认上下内边距,旧版本直接给Toolbar设置背景即可覆盖菜单样式的逻辑不再生效,可根据需求选择以下两种修复方案:

方案1:直接移除多余内边距

在现有样式基础上追加弹窗样式配置,将上下内边距重置为0即可恢复旧版效果:

<style name="defaultToolbarTheme" parent="Theme.MaterialComponents.NoActionBar">
    <!-- 保留原有配置项 -->
    <item name="android:textColorPrimary">?app_toolbar_foreground_color</item>
    <item name="android:textColorSecondary">?app_toolbar_foreground_color</item>
    <item name="android:background">@drawable/item_background_menu</item>
    <item name="android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>

    <!-- 新增以下配置关联自定义弹窗样式 -->
    <item name="listPopupWindowStyle">@style/MyListPopupNoPadding</item>
    <item name="android:popupMenuStyle">@style/MyPopupMenuCustomBg</item>
</style>

<!-- 重置列表弹窗上下内边距为0 -->
<style name="MyListPopupNoPadding" parent="Widget.MaterialComponents.ListPopupWindow">
    <item name="android:paddingTop">0dp</item>
    <item name="android:paddingBottom">0dp</item>
</style>

<!-- 给弹出菜单绑定自定义背景 -->
<style name="MyPopupMenuCustomBg" parent="Widget.MaterialComponents.PopupMenu">
    <item name="android:popupBackground">@drawable/item_background_menu</item>
</style>

方案2:修改内边距区域颜色

如果需要保留默认内边距,仅把灰色区域改成和菜单一致的颜色,不需要重置内边距,直接给弹窗指定统一背景即可:

<style name="defaultToolbarTheme" parent="Theme.MaterialComponents.NoActionBar">
    <!-- 保留原有配置项 -->
    <item name="android:textColorPrimary">?app_toolbar_foreground_color</item>
    <item name="android:textColorSecondary">?app_toolbar_foreground_color</item>
    <item name="android:background">@drawable/item_background_menu</item>
    <item name="android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>

    <!-- 新增行:指定弹出菜单整体背景 -->
    <item name="android:popupBackground">@drawable/item_background_menu</item>
</style>

内容的提问来源于stack exchange,提问作者Tom11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:12:13