Android:MaterialButton在样式中覆盖textColor

时间:2019-10-09 12:06:45

标签: android android-button material-components-android material-components

我想定义一个替代的按钮样式,将我的secondaryColor用作背景,并将?colorOnSecondary用作文本。

但是我在努力以一种样式定义textColor。 MaterialButton对使用?colorOnPrimary的textColor使用(专用)选择器可绘制。 因此,这很麻烦。

是否有另一种方法来设置没有选择器的颜色?

1 个答案:

答案 0 :(得分:2)

如果只想覆盖按钮的颜色,则可以使用 materialThemeOverlay 属性(需要版本1.1.0)。
像这样:

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

  <style name="ButtonStyleTextColor">
    <item name="colorOnPrimary">@color/...</item>
    <item name="colorOnSecondary">@color/...</item>
    <item name="colorOnSurface">....</item>
    .....
  </style>

否则,您可以定义自定义样式

<style name="CustomButtonStyle" parent="Widget.MaterialComponents.Button">
  <item name="backgroundTint">@color/my_bg_color_selector</item>
  <item name="android:textColor">@color/my_text_color_selector</item>
</style> 

my_bg_color_selector.xml可能类似于:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="@color/..." android:state_enabled="true"/>
  <item android:alpha="0.12" android:color="@color/..."/>
</selector>

my_text_color_selector.xml可以是:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:color="@color/..." android:state_enabled="true"/>
  <item android:alpha="0.38" android:color="@color/..."/>
</selector>