Android Fragment中Button设置自定义背景后颜色未变化该如何解决?
问题原因
你当前项目默认使用了MaterialComponents主题,标准Button组件会被自动替换为MaterialButton,系统默认的背景色调会覆盖你设置的android:background属性,导致自定义drawable不生效。
解决方案
你可以选择以下任意一种方法解决:
- 方法1:给当前Button添加
app:backgroundTint="@null"属性,关闭默认的背景色调覆盖,修改后的Button代码如下:
<Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="login" android:background="@drawable/button_bg" app:backgroundTint="@null" android:textStyle="bold" android:textSize="16sp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias=".7" app:layout_constraintWidth_percent=".8"/>
- 方法2:将布局中的
Button替换为androidx.appcompat.widget.AppCompatButton,不会触发MaterialComponents的默认样式替换。 - 方法3:如果你需要保留MaterialButton的特性,直接用MaterialComponent提供的属性配置样式,不需要额外写drawable文件:
<com.google.android.material.button.MaterialButton android:layout_width="0dp" android:layout_height="wrap_content" android:text="login" app:backgroundTint="#F82F5A" app:cornerRadius="20dp" android:textStyle="bold" android:textSize="16sp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias=".7" app:layout_constraintWidth_percent=".8"/>
- 方法4:全局修改主题,在
res/values/themes目录下找到你的应用主题,将主题父类从Theme.MaterialComponents.xxx修改为带Bridge后缀的版本,比如:
<style name="Theme.你的应用名" parent="Theme.MaterialComponents.DayNight.NoActionBar.Bridge"> <!-- 其余主题配置保持不变 --> </style>
修改后所有普通Button都会沿用传统的视图逻辑,不会被替换为MaterialButton。
内容的提问来源于stack exchange,提问作者Estif
相关产品推荐
相关产品推荐

