MaterialComponents CheckBox如何保留button属性设置图标的原始色彩
问题原因
在Theme.MaterialComponents主题下,布局中声明的<CheckBox>会被自动实例化为MaterialCheckBox控件,该控件默认优先使用主题配置的颜色对按钮图标着色,原生android:buttonTint="@null"配置无法覆盖这套逻辑,因此多色图标原始颜色被覆盖。
解决方案
有两种可行方案可选:
方案1:改用AppCompatCheckBox
直接将控件替换为AppCompatCheckBox,沿用原有属性配置即可生效,它不会触发MaterialComponents的默认着色逻辑:
<androidx.appcompat.widget.AppCompatCheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="60dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/button" android:text="Test checkbox" android:gravity="center" android:button="@drawable/multi_color_icon" android:buttonTint="@null" android:paddingStart="8dp" android:paddingEnd="8dp" />
方案2:保留MaterialCheckBox,添加对应属性
继续使用原有CheckBox标签,添加app:useMaterialThemeColors="false"关闭主题默认着色,同时将buttonTint改为app命名空间下的属性并设为null:
<CheckBox android:id="@+id/checkbox" android:layout_width="wrap_content" android:layout_height="60dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/button" android:text="Test checkbox" android:gravity="center" android:button="@drawable/multi_color_icon" app:buttonTint="@null" app:useMaterialThemeColors="false" android:paddingStart="8dp" android:paddingEnd="8dp" />
内容的提问来源于stack exchange,提问作者PM4
相关产品推荐
相关产品推荐

