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

Android Material3自定义颜色不生效及Toolbar图标颜色修改求助

Material3框架下AppBar、Toolbar、FAB未应用自定义颜色的解决方法

问题说明

在Android开发中使用Material3框架,已在colors.xml中定义各类主题颜色,但AppBar、Toolbar、FAB均未应用这些自定义颜色。当前使用Theme.Material3.Light.NoActionBar主题,Toolbar图标显示为黑色,需改为白色。相关代码如下:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Primary Colors -->
    <color name="colorPrimary">#2BAD7D</color>
    <color name="colorPrimaryVariant">#239366</color>
    <color name="colorOnPrimary">#FFFFFF</color>

    <!-- Secondary Colors -->
    <color name="colorSecondary">#FFFFFF</color>
    <color name="colorSecondaryVariant">#F2F2F2</color>
    <color name="colorOnSecondary">#2BAD7D</color>

    <!-- Background Colors -->
    <color name="colorBackground">#FFFFFF</color>
    <color name="colorOnBackground">#737373</color>

    <!-- Surface Colors -->
    <color name="colorSurface">#F2F2F2</color>
    <color name="colorOnSurface">#737373</color>

    <!-- Error Colors -->
    <color name="colorError">#B00020</color>
    <color name="colorOnError">#FFFFFF</color>

    <!-- On-Surface Colors -->
    <color name="colorHighEmphasis">#1B1B1B</color>
    <color name="colorMediumEmphasis">#737373</color>
    <color name="colorDisabled">#C5C5C5</color>
</resources>

activity_main.xml

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/AppBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true">
    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/ToolBar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:title="@string/app_name"
        android:titleTextAppearance="@style/ToolbarTitleAppearance"/>
    <com.google.android.material.tabs.TabLayout
        android:id="@+id/TabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorColor="@color/tabIndicator"
        app:tabTextAppearance="@style/TabLayoutStyle"
        app:tabTextColor="@color/tabTextColor"
        app:tabSelectedTextColor="@color/tabSelectedTextColor"
        app:tabGravity="fill"
        app:tabInlineLabel="true"
        app:tabIconTint="@drawable/x_tab_icon_opacity"
        android:contentDescription="@string/homeTabLayout"/>
</com.google.android.material.appbar.AppBarLayout>

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="16dp"
    android:layout_marginBottom="16dp"
    android:contentDescription="@string/homeFAB"
    android:src="@drawable/x_icon_message"
    tools:ignore="ImageContrastCheck"/>

解决步骤

1. 绑定自定义颜色到Material3主题属性

Material3不会自动关联旧版命名的颜色资源,需在主题文件(themes.xml或themes.xml (night))中把自定义颜色映射到Material3标准属性:

<style name="Theme.YourAppName" parent="Theme.Material3.Light.NoActionBar">
    <!-- 主色调映射 -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorOnPrimary">@color/colorOnPrimary</item>
    <item name="colorPrimaryContainer">@color/colorPrimaryVariant</item>

    <!-- 背景与表面色映射 -->
    <item name="colorBackground">@color/colorBackground</item>
    <item name="colorOnBackground">@color/colorOnBackground</item>
    <item name="colorSurface">@color/colorSurface</item>
    <item name="colorOnSurface">@color/colorOnSurface</item>

    <!-- 指定Toolbar样式继承主题色调 -->
    <item name="toolbarStyle">@style/Widget.Material3.Toolbar.Primary</item>
</style>

2. 强制设置Toolbar背景与图标颜色

若主题映射未生效,可直接给MaterialToolbar指定背景和图标 tint:

<com.google.android.material.appbar.MaterialToolbar
    android:id="@+id/ToolBar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    app:title="@string/app_name"
    android:titleTextAppearance="@style/ToolbarTitleAppearance"
    android:background="@color/colorPrimary"
    app:navigationIconTint="@color/colorOnPrimary"
    app:menuItemIconTint="@color/colorOnPrimary"/>

同时确保标题文字颜色为白色,修改ToolbarTitleAppearance:

<style name="ToolbarTitleAppearance" parent="TextAppearance.Material3.HeadlineSmall">
    <item name="android:textColor">@color/colorOnPrimary</item>
</style>

3. 配置FAB应用自定义主色

默认FAB会使用主题的colorPrimary,若未生效则直接指定:

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignParentBottom="true"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:layout_marginEnd="16dp"
    android:layout_marginBottom="16dp"
    android:contentDescription="@string/homeFAB"
    android:src="@drawable/x_icon_message"
    app:backgroundTint="@color/colorPrimary"
    app:tint="@color/colorOnPrimary"
    tools:ignore="ImageContrastCheck"/>

4. 统一AppBarLayout背景

若需要AppBarLayout与Toolbar背景一致,添加背景属性:

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/AppBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="@color/colorPrimary">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:13:17