如何为 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>
正常状态:
按下状态:
博学的朋友您好,
我正在使用 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>
正常状态:
按下状态: