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"
.
我发现自 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"
.