可在 MaterialButton android 上绘制的选择器

Posted

技术标签:

【中文标题】可在 MaterialButton android 上绘制的选择器【英文标题】:Selector drawable on MaterialButton android 【发布时间】:2019-09-29 11:40:16 【问题描述】:

我一直在使用新的 MaterialButton 类。当用户单击按钮时,我希望按钮上有不同的颜色。

我从一开始就为此目的使用选择器可绘制对象,但它似乎不适用于 MaterialButton。

<com.google.android.material.button.MaterialButton android:layout_
                                                       android:text="@string/login"
                                                       style="@style/Widget.Mohre.Button"
                                                       android:layout_
                                                       app:cornerRadius="@dimen/card_corner_radius"
                                                       android:padding="@dimen/unit_large"
                                                       android:id="@+id/loginBtn"

/>

我的 Widget.Mohre.Button 样式

<style name="Widget.Mohre.Button" parent="Widget.MaterialComponents.Button">
        <item name="android:textColor">@color/textColorWhite</item>
        <item name="android:background">@drawable/mohre_button_selector</item>
        <item name="android:textAppearance">@style/TextAppearance.Button</item>
        <item name="android:stateListAnimator" tools:ignore="NewApi">@animator/button_state_list_anim</item>
    </style>

我的选择器可绘制

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/mohre_button_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/mohre_button_selected" android:state_enabled="false" android:state_pressed="false" />
<item android:drawable="@drawable/mohre_button_normal" />

我的个人可绘制对象只是具有不同颜色的矩形形状

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <corners android:radius="30dp"></corners>
    <solid android:color="#3a516a"></solid>
</shape>

按钮根本不采用选择器可绘制的颜色。它只是显示应用程序的默认强调色

【问题讨论】:

使用 backgroundTint 代替 android:background 你不能将drawabe选择器设置为android:backgroundTInt 【参考方案1】:

使用正常方式(将可绘制的选择器设置为按钮的背景),如果您使用Theme.MaterialComponents,它将无法按预期工作。

您可以使用Theme.Mater.DayNight.NoActionBar 作为替代,但如果您不想使用该主题,则只需使用:

<androidx.appcompat.widget.AppCompatButton
................/>

即使您使用的是最新的 Material 主题,您也会获得与使用 Appcompat 主题相同的结果!

【讨论】:

【参考方案2】:

如果您想要一个具有自定义背景的按钮(例如应用 &lt;selector&gt;),但您的主题设置为使用 Theme.MaterialComponents(现在是 2021 年),您可以在布局中切换 XML 元素成为&lt;android.widget.Button&gt; 而不是&lt;Button&gt;。这应该会导致 Android 的 Material Components 忽略该元素,并且您可以根据 XML 属性正常操作此按钮。

【讨论】:

以上是关于可在 MaterialButton android 上绘制的选择器的主要内容,如果未能解决你的问题,请参考以下文章

Android MaterialButton使用详解,告别shapeselector

Android MaterialButton使用详解,告别shapeselector

如何以编程方式将背景颜色从 android.support.design 更改为 MaterialButton

如何在kotlin android的MaterialButton中获取背景颜色

Android MaterialButton Set Check in XML for DataBinding

drawableLeft图标和文本之间的Android MaterialButton填充