Android 自 Android Studio 4.1 以来背景可绘制对象在按钮中不起作用

Android Background Drawable Not Working in Button Since Android Studio 4.1

我发现自 Android Studio 4.1 以来,我无法通过在其 android:background 上设置颜色来更改 Button 的背景颜色,只是没有效果。自定义 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 的 Material 组件忽略该元素,并且您可以根据 XML 属性正常操作此按钮。

更新 03/2021

app:backgroundTint="@null"    //just need this
android:background="@drawable/background_button"

好的,因为MaterialButton是默认的Button,从AndroidStudio 4.1开始,我们可以使用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

结果:

我在这个视频中找到了最简单的解决方案。

https://www.youtube.com/watch?v=E_1H52FEqII

只需转到项目 window 中值文件夹下的 themes.xml 并将两个主题中的 MaterialComponents 更改为 AppCompact,按钮开始像过去一样正常工作。

现有:Theme.MaterialComponents.DayNight.DarkActionBar 修改后:Theme.AppCompat.DayNight.DarkActionBar

仅添加: app:backgroundTint="@null"

它对我有用,希望对其他人也有用。 只需将 null 设置为 backgroundTint.

android:backgroundTint="@null".