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
相关产品推荐
相关产品推荐

