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

Android Studio中按钮内图标颜色无法修改的问题求助

问题

在线性布局中添加了两个按钮并设置了间距,已修改drawable目录中图标的颜色,但图标仍显示为主题的primary颜色。

按钮截图:两个底部按钮,左侧为取消按钮、右侧为确认按钮,图标颜色均为主题绿色

我的XML代码

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_gravity="fill_horizontal"
  android:gravity="bottom">

<Button
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginLeft="30dp"
    android:layout_marginBottom="8dp"
    android:background="@drawable/baseline_cancel_24"
    android:gravity="left"
    android:text="cancel"
    android:backgroundTint="@color/red"
    android:textColor="@android:color/transparent" />

<Space
    android:layout_width="40dp"
    android:layout_height="wrap_content"
    android:layout_weight="0.5" />

<Button
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginRight="30dp"
    android:layout_marginBottom="8dp"
    android:background="@drawable/baseline_check_24"
    android:backgroundTint="@color/green"
    android:gravity="right"
    android:text="confirm"
    android:textColor="@android:color/transparent" />
</LinearLayout>

我的主题代码

<style name="Theme.PoliceTracker" parent="Theme.MaterialComponents.NoActionBar">
    <!-- Primary brand color. -->
    <item name="colorPrimary">@color/green</item>
    <item name="colorPrimaryVariant">@color/green</item>
    <item name="colorOnPrimary">@color/white</item>
    <!-- Secondary brand color. -->
    <item name="colorSecondary">@color/green</item>
    <item name="colorSecondaryVariant">@color/green</item>
    <item name="colorOnSecondary">@color/black</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
    <!-- Customize your theme here. -->
</style>
解决方法

原因分析

你使用的是Theme.MaterialComponents.NoActionBar主题,系统会自动将普通Button替换为MaterialButton。MaterialButton会对设置的android:background应用主题的tint颜色,导致你修改的drawable图标颜色被覆盖,同时backgroundTint是作用于整个按钮背景,而非单独图标。

方案1:改用android:src设置图标(推荐)

将按钮的图标设置到android:src属性,用android:tint指定图标颜色,同时设置透明背景:

<Button
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginLeft="30dp"
    android:layout_marginBottom="8dp"
    android:background="@android:color/transparent"
    android:src="@drawable/baseline_cancel_24"
    android:tint="@color/red"
    android:text="cancel"
    android:textColor="@android:color/transparent" />

<Button
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginRight="30dp"
    android:layout_marginBottom="8dp"
    android:background="@android:color/transparent"
    android:src="@drawable/baseline_check_24"
    android:tint="@color/green"
    android:text="confirm"
    android:textColor="@android:color/transparent" />

方案2:禁用MaterialButton的自动tint

在Button标签中添加app:backgroundTint="@null",让drawable的原始颜色生效:

<Button
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginLeft="30dp"
    android:layout_marginBottom="8dp"
    android:background="@drawable/baseline_cancel_24"
    app:backgroundTint="@null"
    android:text="cancel"
    android:textColor="@android:color/transparent" />

方案3:使用ImageButton替代Button

如果按钮仅需展示图标,用ImageButton更合适:

<ImageButton
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginLeft="30dp"
    android:layout_marginBottom="8dp"
    android:src="@drawable/baseline_cancel_24"
    android:tint="@color/red"
    android:background="@android:color/transparent" />

<ImageButton
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_marginRight="30dp"
    android:layout_marginBottom="8dp"
    android:src="@drawable/baseline_check_24"
    android:tint="@color/green"
    android:background="@android:color/transparent" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:13:20