Android Button添加drawable背景边框后仍显示默认样式如何解决
问题原因
你遇到的是MaterialComponents主题下的默认适配问题:
- 目前Android Studio新建项目默认使用
Theme.MaterialComponents.*系列主题,该主题下布局中声明的<Button>控件会被自动替换为MaterialButton实例 MaterialButton默认自带背景着色逻辑,会覆盖android:background属性设置的自定义drawable,而TextView等其他控件不受该规则限制,所以才会出现其他控件生效、Button不生效的情况- 布局预览能正常显示是因为预览渲染没有完全套用运行时的主题替换逻辑
解决方案
你可以任选以下任意一种方式解决:
- 方案1:替换控件类型
将布局中的<Button标签直接替换为<androidx.appcompat.widget.AppCompatButton,其余属性无需修改,自定义背景即可正常生效。 - 方案2:单独关闭当前Button的背景着色
在目标Button的属性中新增app:backgroundTint="@null",同时要确保布局根节点已经声明命名空间xmlns:app="http://schemas.android.com/apk/res-auto",即可让你设置的android:background属性生效。 - 方案3:全局修改主题(适合项目不需要MaterialComponents默认样式的场景)
打开res/values/themes目录下的主题文件,将主题的父类从Theme.MaterialComponents.*修改为Theme.AppCompat.*,全局所有Button都会响应自定义背景设置。
内容的提问来源于stack exchange,提问作者Ilan
相关产品推荐
相关产品推荐

