自 Android Studio 4.1 起,Android 后台 Drawable 无法在按钮中工作

问题描述 投票:0回答:6

我发现从 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 material-design android-drawable android-button android-styles
6个回答
127
投票

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 属性正常操作该按钮。


70
投票

更新 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

结果:


15
投票

仅添加以下内容: 应用程序:backgroundTint =“@null”


5
投票

通过设置

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"
        ..........
        />

注意:根据您的需要进行编辑...


2
投票

它对我有用,希望对其他人也有用。 只需将

null
设置为
backgroundTint

android:backgroundTint="@null"
.


1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.