Я пытаюсь настроить тематику 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
в качестве фона.