# 问题描述 使用的主题代码如下图:  布局中只有一个Button,代码如下: ```xml ``` 最终运行出来的结果应该是蓝色的按钮,但实际上按钮还是主题色(即主题代码中"colorPrimary"属性的值)。 # 原因 MaterialComponents主题下所有Button都是Material类型的Button,默认使用主题色。 # 解决 解决方式有如下几种: #### 方法1: 使用android.widget.Button代替Button 将 ```xml ``` # 实践总结 下面总结一下在MaterialComponents主题和以Bridge结尾的主题下`Button`、`androidx.appcompat.widget.AppCompatButton`、`android.widget.Button`、`MaterialButton`在xml中使用不同的api设置背景颜色和在Java中修改背景颜色的具体变化是否修改有效。 ## 1、MaterialComponents主题下 在Theme.MaterialComponents.DayNight.DarkActionBar主题下。  结果发现,在 MaterialComponents 主题下 `Button`和`MaterialButton`设置背景颜色的效果一样,`android.widget.Button` 和 `AppCompatButton`设置背景颜色的效果一样。 `android.widget.Button` 和 `AppCompatButton`在xml布局中两种设置背景颜色的方法都能成功,在Java中修改背景颜色时,只要不在xml布局中同时使用backgroundTint属性,也都可以设置成功 ## 2、以Bridge结尾的主题下 在Theme.MaterialComponents.DayNight.NoActionBar.Bridge主题下  其中: - **xml空:**表示xml中不使用 background 和 backgroundTint 设置背景颜色的前提下 - **xml空|background:**表示 xml中不使用 background 和 backgroundTint 设置背景颜色或者 在xml中使用了background设置背景颜色的前提下。 - **xml空|backgroundTint:**表示 xml中不使用 background 和 backgroundTint 设置背景颜色 或者 在xml中使用了backgroundTint设置背景颜色的前提下。 - **有效/无效:**表示 xml中不使用 background 和 backgroundTint 设置背景颜色 或者 在xml中使用了background或backgroundTint设置背景颜色的前提下都有效/无效。 总结发现:`Button`、`androidx.appcompat.widget.AppCompatButton`、`android.widget.Button`在xml中设置背景颜色,无论使用那个api都能设置成功,在Java中设置背景颜色时只要保证不同时在xml布局中使用backgroundTint设置背景颜色就可以设置成功。 `MaterialButton`在xml中只能使用backgroundTint设置成功,在Java中只有使用setBackgroundColor()并且不能同时在xml布局中使用background属性时才能设置成功。 # 参考: [【Android】关于Button中设置背景\样式失效的问题及解决办法](https://blog.csdn.net/weixin_52089884/article/details/122616834 "【Android】关于Button中设置背景\样式失效的问题及解决办法") [Android Button#background 在MaterialComponents主题下无效问题](https://blog.csdn.net/qq_38350635/article/details/126785673 "Android Button#background 在MaterialComponents主题下无效问题") 最后编辑:2023年03月10日 ©著作权归作者所有
最新回复