在不更改colorAccent的情况下无法更改MaterialButton上的背景颜色

时间:2019-03-10 11:05:19

标签: android material-design

Android Studio 3.2.1 这是我的布局:

'number*[1-9]*'

要更改 MaterialButton的背景,我要在 styles.xml

中更改 colorAccent
'number*[1-9]+'

好。工作。

但是问题是:我不想更改 colorAccent 。我想为 MaterialButton的使用与 colorAccent

不同的背景颜色

属性:

<com.google.android.material.button.MaterialButton
                android:id="@+id/bittrexJsonViewButton"
                android:layout_width="0dp"
                android:layout_height="@dimen/min_height"
                android:layout_marginStart="@dimen/half_default_margin"
                android:layout_marginEnd="@dimen/half_default_margin"
                android:text="@string/json_view"
                app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton"
                app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />

没有帮助。

10 个答案:

答案 0 :(得分:8)

如果要设置自定义可绘制对象,则需要制作app:backgroundTint="@null"。仅更改背景颜色app:backgroundTint="@color/yourColor"

我当前正在使用1.3.0-alpha01

<com.google.android.material.button.MaterialButton
            android:id="@+id/bittrexJsonViewButton"
            android:layout_width="0dp"
            android:layout_height="@dimen/min_height"
            android:layout_marginStart="@dimen/half_default_margin"
            android:layout_marginEnd="@dimen/half_default_margin"
            app:backgroundTint="@null"
            android:background="@drawable/your_custom_drawable"
            android:text="@string/json_view"
            app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton"
            app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />

答案 1 :(得分:5)

使用新的Material Button,您有2个选择:

  1. 使用Zaid Mirza建议的backgroundTint属性

  2. 我认为这是最好的选择。如果要从默认样式覆盖某些主题属性,则可以使用新的 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>

它需要库的版本 1.1.0 (当前的最新版本是1.1.0-beta02)。

答案 2 :(得分:5)

2020:看来他们只是在2020年4月1日解决了这个问题。

它应该从GitHub issue was closed as "Fixed"开始在1.2.0 beta 1上发布

答案 3 :(得分:2)

第一个解决方案

您可以使用app:backgroundTint来更改MaterialButton的背景色

<com.google.android.material.button.MaterialButton
                android:id="@+id/bittrexJsonViewButton"
                android:layout_width="0dp"
                android:layout_height="@dimen/min_height"
                android:layout_marginStart="@dimen/half_default_margin"
                android:layout_marginEnd="@dimen/half_default_margin"
                app:backgroundTint="@android:color/holo_orange_dark"
                android:text="@string/json_view"
                app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton"
                app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />

第二个解决方案

MaterialButton在按钮处于活动状态时使用colorPrimary作为背景,而在按钮处于禁用状态时使用colorOnSurface。因此,您可以在主题中定义它,并将其应用到材质按钮上

答案 4 :(得分:1)

backgroundTint 还更改了禁用状态的颜色,因此对我不利

我能找到的最佳解决方案是通过覆盖样式覆盖 MaterialButton(仅)的主要颜色

将此代码添加到您的样式中。

?attr/colorSecondary 替换为您想要的任何颜色

<style name="MyButtonTheme" parent="Widget.MaterialComponents.Button">
    <item name="materialThemeOverlay">@style/ButtonStyleTextColor</item>
</style>

<style name="ButtonStyleTextColor">
    <item name="colorPrimary">?attr/colorSecondary</item>
</style>

给按钮添加主题

<com.google.android.material.button.MaterialButton
//..
android:theme="@style/MyButtonTheme"/>

如果您使用 MDC 并且想要更改所有按钮的主题:

将此行添加到您的 themes.xml

<item name="materialButtonStyle">@style/Button.MyTheme</item>

并将这些行添加到您的 type.xml

<style name="Button.MyTheme" parent="Widget.MaterialComponents.Button">
    <item name="materialThemeOverlay">@style/ButtonStyleTextColor</item>
</style>

<style name="ButtonStyleTextColor">
    <item name="colorPrimary">?attr/colorSecondary</item>
</style>

在这种情况下,您不需要将 android:theme="@style/MyButtonTheme" 添加到您的 MaterialButton

如果有任何错误请告诉我,不要急于降级

答案 5 :(得分:0)

backgroundTintMode更改为add,然后将显示您的background属性。请参见下面的示例:

<com.google.android.material.button.MaterialButton
                android:id="@+id/bittrexJsonViewButton"
                android:layout_width="0dp"
                android:layout_height="@dimen/min_height"
                android:layout_marginStart="@dimen/half_default_margin"
                android:layout_marginEnd="@dimen/half_default_margin"
                android:text="@string/json_view"
                android:background:"#aabbcc"
                app:backgroundTintMode="add"
                app:layout_constraintBottom_toBottomOf="@+id/binanceJsonViewButton"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toEndOf="@+id/binanceJsonViewButton"
                app:layout_constraintTop_toTopOf="@+id/binanceJsonViewButton" />

答案 6 :(得分:0)

评论询问使用colorOnSurface禁用颜色,您需要使用主题设置,

赞:

<style name="MaterialRedButton"
    parent="Widget.MaterialComponents.Button">
    <item name="materialThemeOverlay">@style/MaterialRedButtonThemeOverlay</item>
</style>

<style name="MaterialRedButtonThemeOverlay">
    <item name="colorPrimary">@android:color/holo_red_dark</item>
    <item name="colorOnSurface">@color/white</item>
</style>

答案 7 :(得分:0)

BackgroundTint 始终适用于材质按钮,但首先,请卸载应用程序并重新安装。有时,在您重新安装应用之前,更改可能不会反映出来。

android:backgroundTint 应用于 android:background 和 他们的组合可以由android:backgroundTintMode

控制

请检查此答案以了解 android:backgroundandroid:backgroundTintandroid:backgroundTintMode 之间的区别

https://stackoverflow.com/a/38080463/14289342

答案 8 :(得分:0)

对我有用的解决方案如下所述:

按钮标签

<Button
     android:id="@+id/login_btn"
     style="@style/PrimaryButtonStyle"
     app:backgroundTint="@null"
     android:enabled="true"
     android:text="@string/txtBtnLogin" />

@Style/PrimaryButtonStyle

<style name="PrimaryButtonStyle" parent="@style/Widget.MaterialComponents.Button">
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_marginTop">5dp</item>
    <item name="android:textColor">@color/colorPrimary</item>
    <item name="android:background">@drawable/base_button_style</item>
    <item name="textAllCaps">false</item>
    <item name="android:textSize">16sp</item>
</style>

Output

此输出 - 按钮背景(浅蓝色)与布局背景(比较深蓝色)不同

答案 9 :(得分:0)

您可以按照以下代码进行操作。

 import numpy as np
    matrix = np.zeros([5,5])
    matrix[0][0] = 1
    count = 0
    while matrix[2][2] != 1:
        count += 1
        matrix[count][count] = matrix[0][0] 
    print(count)