Android переопределить предопределенный родительский стиль - PullRequest
0 голосов
/ 21 февраля 2020

Я использую один из предопределенных стилей для 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>

Теперь я попытался переопределить один из атрибутов Widget.MaterialComponents.Button.TextButton в моих стилях. xml

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

Интересно, это правильный подход или нет переопределить предопределенный стиль и стиль Widget.MaterialComponents.Button.OutlinedButton будет использовать @color/colorAccent в качестве цвета текста. Я думаю, что это работает, но я не могу быть уверен, есть ли побочный эффект этого подхода или есть лучший способ?

1 Ответ

1 голос
/ 21 февраля 2020

Вы можете использовать одно из следующего:

<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>

При таком подходе вы наследуете все свойства вашего родительского стиля и будете объявлять только те свойства, которые вы хотите изменить /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" />
...