MaterialComponents中android:background替代方案与背景失效问题解决
嘿,这个问题我之前也碰到过!当你把主题切换到MaterialComponents之后,布局里的默认Button其实会被自动替换成MaterialButton——这个控件有自己的一套背景处理逻辑,默认会用backgroundTint属性来控制背景,直接把你设置的android:background给覆盖掉了。要保住你那套bg_circle_btn的自定义背景,跟着做这几步就行:
1. 禁用MaterialButton的默认背景着色
给你的Button加上app:backgroundTint="@null"这个属性,相当于告诉MaterialButton:“别用你的默认背景逻辑了,我自己来!” 修改后的布局代码是这样的:
<Button android:id="@+id/custom_category_image" android:layout_width="match_parent" android:layout_height="25dp" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:background="@drawable/bg_circle_btn" android:text="A" android:textColor="@color/colorWhite" android:textSize="12dp" android:visibility="gone" app:srcCompat="@drawable/ic_navigate_next_black_24dp" app:backgroundTint="@null" />
2. (小提示)让圆形显示更正常
你现在的bg_circle_btn里设置了固定的120dp宽高,但Button本身的高只有25dp、宽是match_parent,这样可能会导致圆形显示变形。如果要保证它是正圆形,要么把Button的宽高改成一样的数值(比如都设为25dp),要么把shape里的固定size去掉,让它自适应Button的尺寸:
<!-- 修改后的bg_circle_btn.xml --> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <solid android:color="?attr/toolbarcolor" /> <!-- 移除固定的size标签,让形状随Button尺寸变化 --> </shape>
另外还有个备选方案:如果你不想用MaterialButton,也可以在布局里直接指定用AppCompat的Button,这样就能和之前AppCompat主题下的表现完全一致:
<androidx.appcompat.widget.AppCompatButton <!-- 其他属性和你原来的一样 --> android:background="@drawable/bg_circle_btn" />
不过还是更推荐第一种方法,这样你还能保留MaterialComponents主题带来的其他特性~
内容的提问来源于stack exchange,提问作者Priyanka Singh
相关产品推荐
相关产品推荐

