Android开发中Button组件android:backgroundTint属性失效问题求助
- 主题默认适配Material组件导致属性不生效
现在新建的Android项目默认使用MaterialComponents系列主题,布局中声明的普通Button会被自动替换为MaterialButton组件,该组件的背景着色属性优先使用app命名空间下的backgroundTint,而非系统原生的android:backgroundTint。同时android:backgroundTint仅支持API 21及以上版本,app:backgroundTint可以向下兼容到API 14。
解决方案:将布局中所有android:backgroundTint替换为app:backgroundTint即可,你当前的布局已经引入了app命名空间,不需要额外添加声明。
示例修改代码:
<Button android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" app:backgroundTint="@color/black" android:onClick="gantiBackground" android:text="HITAM" android:textColor="#FFFFFF"/>
- 自定义background和backgroundTint冲突
MaterialButton默认自带全局的背景着色配置,如果你同时设置了android:background自定义背景,默认的tint配置会覆盖你自定义的属性,导致设置不生效。
解决方案:如果你只需要修改纯色背景,直接设置app:backgroundTint即可,不需要额外配置android:background;如果你需要自定义drawable作为背景,先给Button添加属性app:backgroundTint="@null",取消默认的着色规则,再设置你需要的android:background属性即可。 - 全局主题配置覆盖局部属性
如果上述修改后依然不生效,检查你的App主题配置中是否全局设置了buttonStyle属性,如果该样式中定义了backgroundTint相关配置,会优先于布局中的局部属性生效。你可以在对应Button上添加属性android:theme="@style/ThemeOverlay.MaterialComponents.Button"单独指定按钮主题,或者删除全局样式中的backgroundTint配置。
内容的提问来源于stack exchange,提问作者Hillary Dorothea Kristianto
相关产品推荐
相关产品推荐

