如何为 Android 按钮覆盖 material 设计状态

How to Override material design statepressed in for Android Button

博学的朋友您好,

我正在使用 Material 设计主题,但我需要覆盖它的 statePressed 以便在单击按钮时它会改变颜色(突出显示片刻),如下所示。

为此,我在按钮上设置了一个可绘制对象,如下所示

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="false">
    <shape>
        <solid android:color="@color/primaryColor" />
        <stroke android:color="@color/primaryDarkColor" android:width="@dimen/stroke_width"/>
        <corners android:radius="@dimen/corner_radius" />

    </shape>

</item>


<item android:state_pressed="true">
    <shape>
        <solid android:color="@color/secondaryColor" />
        <stroke android:color="@color/secondaryLightColor" android:width="@dimen/stroke_width" />
        <corners android:radius="@dimen/corner_radius" />

    </shape>

</item>

我还有一个 ThemeOverlay 来覆盖按下的状态

    <style name="ThemeOverlay.Red.UnitedStates" parent="">
<item name="android:colorPressedHighlight">@color/secondaryColor</item>
    </style>

不幸的是,当我点击按钮时,高亮显示没有发生。

我可能遗漏了什么?

这是Material主题XML

 <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/primaryColor</item>
    <item name="colorPrimaryVariant">@color/primaryLightColor</item>
    <item name="colorPrimaryDark">@color/primaryDarkColor</item>

您可以只使用 app:backgroundTint 属性:

     <com.google.android.material.button.MaterialButton
          app:backgroundTint="@color/custom_button_selector"
          ../>

与:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/red600" android:state_pressed="true"/>
    <item android:color="?attr/colorPrimary" android:state_enabled="true"/>
    <item android:alpha="0.12" android:color="?attr/colorOnSurface"/>
</selector>

正常状态:

按下状态: