我发现从 Android Studio 4.1 开始,我无法通过在
Button
上设置颜色来更改 android:background
的背景颜色,只是没有效果。而且自定义 Drawable
也不起作用。
我的背景
Drawable
:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<stroke
android:width="1.5dp"
android:color="@android:color/black" />
<solid
android:color="@android:color/white" />
<corners
android:radius="8dp" />
</shape>
我的
Button
:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add To Cart"
android:background="@drawable/background3"/>
结果:
Android Studio 4.1 新建项目向导的许多模板都让项目使用 Material Components for Android 库。并且,它将默认主题设置为基于
Theme.MaterialComponents.DayNight.DarkActionBar
。
这样做的一个副作用是,布局中的任何
<Button>
元素都会变成 MaterialButton
小部件,而不是常规的 Button
小部件。 MaterialButton
忽略android:background
。
如果您只想更改颜色,请使用
android:backgroundTint
或更改主题中的 colorPrimary
属性。
如果您想要一个具有自定义背景的按钮,并且您的主题设置为使用
Theme.MaterialComponents
,您可以将布局中的 XML 元素切换为 <android.widget.Button>
而不是 <Button>
。这应该会导致 Android 的材质组件忽略该元素,并且您可以根据 XML 属性正常操作该按钮。
更新 03/2021
app:backgroundTint="@null" //just need this
android:background="@drawable/background_button"
好的,因为从 Android Studio 4.1 开始,
MaterialButton
是默认的 Button
,所以我们可以使用 app:shapeAppearanceOverlay
属性来修改形状。
1。在
themes.xml
中创建自定义样式:
<style name="leaf">
<item name="cornerSizeTopLeft">70%</item> //can specify corner position
<!--<item name="cornerFamilyTopLeft">cut</item>-->
<item name="cornerSizeBottomRight">70%</item>
<!--<item name="cornerFamilyBottomRight">cut</item>-->
</style>
2。在
Material Button
中应用样式:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Show"
app:shapeAppearanceOverlay="@style/leaf" /> //here
结果:
仅添加以下内容: 应用程序:backgroundTint =“@null”
通过设置
app:backgroundTint="@null"
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<stroke
android:width="2dp"
android:color="@color/lightBlue" />
<corners android:radius="8dp"/>
<gradient android:endColor="#FFD374" android:startColor="#FFBC68" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<stroke
android:width="2dp"
android:color="@color/lightBlue" />
<corners android:radius="8dp"/>
<gradient android:endColor="#FFBC68" android:startColor="#FFD374" />
</shape>
</item>
</selector>
转到 xml 文件并像这样添加它
<com.google.android.material.button.MaterialButton
...........
app:backgroundTint="@null"
android:background="@drawable/linear_gradient"
..........
/>
注意:根据您的需要进行编辑...
它对我有用,希望对其他人也有用。 只需将
null
设置为 backgroundTint
。
android:backgroundTint="@null"
.
我在这个视频中找到了最简单的解决方案。
https://www.youtube.com/watch?v=E_1H52FEqII
只需转到项目窗口中values文件夹下的themes.xml,并将两个主题中的MaterialComponents更改为AppCompact,按钮就开始像过去一样正常工作。
现有:Theme.MaterialComponents.DayNight.DarkActionBar 修改后:Theme.AppCompat.DayNight.DarkActionBar