Android 覆盖预定义的父样式

Android override predefined parent style

我使用 MaterialButton 的预定义样式之一。

<com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.OutlinedButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Approve" />

这是我使用的样式预定义样式。

 </style>
    <style name="Widget.MaterialComponents.Button.OutlinedButton" parent="Widget.MaterialComponents.Button.TextButton">
    <item name="android:paddingLeft">@dimen/mtrl_btn_padding_left</item>
    <item name="android:paddingRight">@dimen/mtrl_btn_padding_right</item>
    <item name="strokeColor">@color/mtrl_btn_stroke_color_selector</item>
    <item name="strokeWidth">@dimen/mtrl_btn_stroke_size</item>
  </style>

这是 Widget.MaterialComponents.Button.OutlinedButton

的父样式
 <style name="Widget.MaterialComponents.Button.TextButton" parent="Widget.MaterialComponents.Button.UnelevatedButton">
    <item name="android:textColor">@color/mtrl_text_btn_text_color_selector</item>
    <item name="android:paddingLeft">@dimen/mtrl_btn_text_btn_padding_left</item>
    <item name="android:paddingRight">@dimen/mtrl_btn_text_btn_padding_right</item>
    <item name="iconTint">@color/mtrl_text_btn_text_color_selector</item>
    <item name="iconPadding">@dimen/mtrl_btn_text_btn_icon_padding</item>
    <item name="backgroundTint">@color/mtrl_btn_text_btn_bg_color_selector</item>
    <item name="rippleColor">@color/mtrl_btn_text_btn_ripple_color</item>
  </style>

现在我试图在我的 styles.xml

中覆盖 Widget.MaterialComponents.Button.TextButton 的一个属性
 <style name="Widget.MaterialComponents.Button.TextButton">
        <item name="android:textColor">@color/colorAccent</item>
 </style>

我想知道这是否是覆盖预定义样式的正确方法,并且样式 Widget.MaterialComponents.Button.OutlinedButton 将使用 @color/colorAccent 作为文本颜色。我认为它有效,但我不确定这种方法是否有任何副作用或是否有更好的方法?

您可以使用以下其中一项:

<style name="MyCustomStyle" parent="Widget.MaterialComponents.Button.OutlinedButton">
    <item name="android:textColor">@color/colorAccent</item>
</style>
<style name="Widget.MaterialComponents.Button.OutlinedButton.MyCustomStyle">
    <item name="android:textColor">@color/colorAccent</item>
</style>

使用这些方法,您将继承父样式的所有属性,并且您将只声明您喜欢的那些属性 change/override。

并在您的布局文件中使用此样式,如下所示:

<com.google.android.material.button.MaterialButton
        style="@style/MyCustomStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Approve" />

<com.google.android.material.button.MaterialButton
        style="@style/Widget.MaterialComponents.Button.OutlinedButton.MyCustomStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Approve" />