Как изменить стили для MaterialButton без дублирования? - PullRequest
1 голос
/ 20 сентября 2019

Мы используем компоненты материала 1.0.0 и хотели изменить стиль MaterialButton в приложении.Мы создали свои собственные стили, расширяющие стили из библиотеки компонентов.Сейчас у нас есть что-то вроде:

<resources>
    <style name="MyApp.Button" parent="Widget.MaterialComponents.Button">
        <item name="android:minHeight">@dimen/action_button_min_height</item>
        <item name="android:minWidth">@dimen/action_button_min_width</item>
        <item name="android:fontFamily">@fonts/customFont</item>
        <item name="android:singleLine">true</item>
        <item name="android:textAllCaps">false</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:insetTop">0dp</item>
        <item name="android:insetBottom">0dp</item>
    </style>

    <style name="MyApp.Button.Unelevated" parent="Widget.MaterialComponents.Button.UnelevatedButton">
        <item name="android:minHeight">@dimen/action_button_min_height</item>
        <item name="android:minWidth">@dimen/action_button_min_width</item>
        <item name="android:fontFamily">@fonts/customFont</item>
        <item name="android:singleLine">true</item>
        <item name="android:textAllCaps">false</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:insetTop">0dp</item>
        <item name="android:insetBottom">0dp</item>
    </style>

    <style name="MyApp.Button.Text" parent="Widget.MaterialComponents.Button.TextButton">
        <item name="android:minHeight">@dimen/action_button_min_height</item>
        <item name="android:minWidth">@dimen/action_button_min_width</item>
        <item name="android:fontFamily">@fonts/customFont</item>
        <item name="android:singleLine">true</item>
        <item name="android:textAllCaps">false</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:insetTop">0dp</item>
        <item name="android:insetBottom">0dp</item>
    </style>

    <style name="MyApp.Button.Outlined" parent="Widget.MaterialComponents.Button.OutlinedButton">
        <item name="android:minHeight">@dimen/action_button_min_height</item>
        <item name="android:minWidth">@dimen/action_button_min_width</item>
        <item name="android:fontFamily">@fonts/customFont</item>
        <item name="android:singleLine">true</item>
        <item name="android:textAllCaps">false</item>
        <item name="android:paddingLeft">8dp</item>
        <item name="android:paddingRight">8dp</item>
        <item name="android:insetTop">0dp</item>
        <item name="android:insetBottom">0dp</item>
    </style>
</resources>

Есть ли способ избежать определения одинаковых значений для каждого стиля?

1 Ответ

0 голосов
/ 20 сентября 2019

Так как вы используете разные родительские стили, вы можете ограничивать только некоторые атрибуты, но не все.

Например, вы можете определить:

<style name="MyButtonTextAppearance" parent="@style/TextAppearance.MaterialComponents.Button>
    <item name="fontFamily">.....</item>
    <item name="android:fontFamily">...</item>
    <item name="android:textStyle">...</item>
    <item name="android:textAllCaps">...</item>
    <item name="android:textSize">...</item>
    <item name="android:letterSpacing">...</item>
</style>

И в ваших стилях вы можете удалитьте же атрибуты, используя:

<style name="MyApp.Button" parent="Widget.MaterialComponents.Button">
   ....
   <item name="android:textAppearance">@style/MyButtonTextAppearance</item>
</style>
...