Объявление изменяемой прозрачности основного цвета в XML без явного объявления каждого цветового ресурса - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть цветовой ресурс ниже:

<color name="colorPrimary">#546e7a</color>

Я хочу установить этот цветовой ресурс как цвет многих типов текста моих настроенных тем. Однако в каждой теме я могу захотеть изменить значение прозрачности (то есть a в rgba) моего цветового ресурса. Если возможно, я не хочу переопределить новый цветовой ресурс, как показано ниже (просто потому, что я мог бы использовать много разных значений прозрачности):

<color name="colorPrimary12Percent">#1FD81B60</color>

Есть ли какая-то функция в XML что может изменить прозрачность значения ресурса цвета, учитывая ресурс цвета и значение прозрачности (например, rgba(colorResourceValue, transparencyValue))? Пример того, что я хочу сделать с указанной функцией:

<style name="SomeNewStyle" parent="InheritFromThis">
    <item name="android:textColor">rgba(@color/colorPrimary, 12%)</item> <!-- This is what I want -->
</style>

1 Ответ

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

Попробуйте ColorStateList . Вы можете найти полезное описание в Android Стиль: предпочтительные атрибуты темы .

A ColorStateList позволяет комбинировать цвет текста и значение альфа по теме / стиль следующим образом:

Определить пользовательский атрибут, который будет содержать альфа-значение:

<resources>
    <declare-styleable name="MyAttrs">
        <attr name="textAlpha" format="float" />
    </declare-styleable>
</resources>

Определить ColorStateList :

<selector>
    <item android:alpha="?attr/textAlpha" android:color="?attr/colorPrimary" />
</selector>

Сложите все вместе в стилях:

<style name="AppTheme">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="textAlpha">0.5</item>
    <item name="android:textColor">@drawable/color_state_list_example</item>
</style>

Если вы хотите изменить цвет по стилю и не использовать colorPrimary , вы можете определить дополнительный атрибут для хранения цвета, такой как для альфа-значение.

...