不能将android:background与新材质组件中的按钮一起使用

hum*_*zed 7 android material-design material-components material-components-android

我在com.google.android.material:materialandroid x上使用了新的材质组件,但无法为按钮设置自定义背景。

我知道我可以app:backgroundTint用来改变颜色

但是默认背景有一些我想消除的填充,以及android:background用于设置自己的背景的旧方法,但是这种方法不再起作用。

我看了看文档,但是找不到关于此更改的任何提及。

Gab*_*tti 16

在材料零件的图书馆,MaterialButton有一个默认的风格,insetBottominsetTop与值6dp

您可以使用以下方法更改它:

  <com.google.android.material.button.MaterialButton
      android:insetTop="0dp"
      android:insetBottom="0dp"
      ../>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如果要更改背景颜色,可以使用该app:backgroundTint属性,也可以覆盖默认样式的某些主题属性,然后可以使用新materialThemeOverlay属性。

在您的情况下,您可以执行以下操作:

<style name="MtButtonStyle"
 parent="Widget.MaterialComponents.Button">
   <item name=“materialThemeOverlay”>@style/GreenButtonThemeOverlay</item>
</style>

<style name="GreenButtonThemeOverlay">
  <item name="colorPrimary">@color/green</item>
</style>
Run Code Online (Sandbox Code Playgroud)

最后从版本开始,1.2.0-alpha06您可以android:backgroundMaterialButton.

<MaterialButton
    app:backgroundTint="@null"
    android:background="@drawable/button_drawable"
    ... />
Run Code Online (Sandbox Code Playgroud)


小智 10

如果你想使用渐变绘制作为MaterialButton背景,

将您的设置MaterialButton如下:

<com.google.android.material.button.MaterialButton
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_margin="16dp"
     app:backgroundTint="@null"
     android:background="@drawable/group_47"
     app:layout_constraintEnd_toEndOf="@+id/input_password"
     app:layout_constraintStart_toStartOf="@+id/input_password"
     app:layout_constraintTop_toBottomOf="@+id/input_password" />
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您想保留您的

android:background="@drawable/button_background"
Run Code Online (Sandbox Code Playgroud)

并且让MaterialButton尊重它,那么你必须设置

app:backgroundTint="@null"
app:backgroundTintMode="add" // it doesn't matter the value, but it must be set
Run Code Online (Sandbox Code Playgroud)

请注意,您也可以使用app:background代替,尽管我注意到了足够多的重大更改,因此我仍然更喜欢上面的方法。


Ben*_* P. 8

MaterialButton课程的文档说:

不要使用该android:background属性。MaterialButton管理自己的背景可绘制对象,并且设置新的背景方法MaterialButton不能再保证其引入的新属性将正常运行。如果更改了默认背景,MaterialButton则不能保证行为明确。

但是,GitHub自述文件指出:

注意:MaterialButton在视觉上与Button和有所不同AppCompatButton。主要区别之一是在左侧和右侧AppCompatButton都有4dp插图,而MaterialButton没有。

这仅提及左/右插图,但是自述文件的“属性”部分显示了所有四个插图均受支持:

在此处输入图片说明

因此,您可以将以下属性添加到<MaterialButton>标签中:

android:insetTop="0dp"
android:insetBottom="0dp"
Run Code Online (Sandbox Code Playgroud)

  • 那么如何在materialButton中添加渐变呢? (3认同)

Coo*_*ind 7

查看https://medium.com/@velmm/material-button-in-android-e4391a243b17我发现app:backgroundTint(和app:backgroundTintMode)有效。它会更改颜色,但不会更改可绘制选择器。

可以替换<Button使用<android.widget.Button