Можно ли повторно использовать фигуру между несколькими состояниями селектора и просто изменить цвет со стилем? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь настроить тематику Android и стили для своего приложения и пытаюсь уменьшить количество дублирующегося кода при попытке стиля кнопок.Сейчас я просто хочу, чтобы мои кнопки имели одинаковую форму прямоугольника с закругленными углами и различали цвет фона и текста в зависимости от формы.Задать цвет текста с помощью селектора легко, так как это все, что меняется, но для формы и цвета фона я не мог понять, как задать форму один раз, и только изменить цвет фона.Я поддерживаю минимальный SDK 14, поэтому я считаю, что backgroundTint не поддерживается.

Я попытался создать пользовательский <shape>, который имеет только закругленные углы, и использовать <layer-list>, чтобы попытаться применитьсплошной цвет до, после и внутри фигуры, но никакая комбинация не позволяет мне просто раскрасить мою форму.

button_shape.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="@dimen/button_radius" />
</shape>

button_backround.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false">
        <layer-list>
            <solid android:color="@color/primary_action_disabled_background" />
            <shape android:shape="@drawable/button_shape" />
        </layer-list>
    </item>
    <!-- Obviously this doesn't compile but just shows you the different styles I've tried -->
    <item> <!-- color after -->
        <layer-list>
            <item>
                <shape android:shape="@drawable/button_shape">
            </item>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="@color/primary_action_background" />
                </shape>
            </item>
        </layer-list>
    </item>
    <item> <!-- color before -->
        <layer-list>
            <item>
                <shape android:shape="rectangle">
                    <solid android:color="@color/primary_action_background" />
                </shape>
            </item>
            <item>
                <shape android:shape="@drawable/button_shape">
            </item>
        </layer-list>
    </item>
    <item> <!-- color inside -->
        <shape android:shape="@drawable/button_shape">
            <solid android:color="@color/primary_action_background" />
        </shape>
    </item>
</selector>

Независимо от того, что я делаю, я получаю либо кнопку без цвета фона, либо квадратную кнопку с primary_action_background в качестве фона.

...