Поддержка библиотеки для поведения цвета текста API 26?

API 26 вводит расширенный расчет цвета для ?textColorPrimary основанный на ?colorForeground, Это использует состояния, primaryContentAlpha а также disabledAlpha,

sdk/platforms/android-26/data/res/color/text_color_primary.xml:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
        android:alpha="?attr/disabledAlpha"
        android:color="?attr/colorForeground"/>
    <item android:alpha="?attr/primaryContentAlpha"
        android:color="?attr/colorForeground"/>
</selector>

В API 23 он возвращается к белому тексту, потому что я не смог понять.

Есть ли библиотека поддержки, которую я мог бы применить для расчета цвета API 26 для более старых устройств?

1 ответ

@eugen-pechanec намекает, что атрибуты primaryContentAlpha а также scondaryContentAlpha отсутствуют, IMHO ниже API 26. Должны ли мы назвать это ошибкой или отсутствующим задним портом? Не знаю

В результате вы не можете использовать настройки ?attr/colorForeground по умолчанию для автоматического создания всех цветов переднего плана из коробки. В основном у вас есть два варианта, либо не использовать его для ручного обратного порта.

запрещать colorForground

Вместо создания цветов из ?attr/colorForeground вы устанавливаете атрибуты android:textColorPrimary а также android:textColorSecondary непосредственно. Это будет лучший выбор в большинстве случаев.

Backport colorForground

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

root theme:

    <!-- workaround to port back API 26+ behaviour -->

    <!-- below 26 these two attributes are missing in the android namespace -->
    <item name="primaryContentAlpha">1.0</item> 
    <item name="secondaryContentAlpha">.85</item>
    <!-- works below 26 -->
    <item name="android:disabledAlpha">.4</item>
    <!-- use my own files to connect my custom attributes -->
    <item name="android:textColorPrimary">@color/text_color_primary</item>
    <item name="android:textColorSecondary">@color/text_color_secondary</item> 

app/src/main/res/color/text_color_primary.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:alpha="?android:disabledAlpha" android:color="?android:attr/colorForeground" />
    <item android:alpha="?attr/primaryContentAlpha" android:color="?android:attr/colorForeground" />
</selector>

app/src/main/res/color/text_color_secondary.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:alpha="?android:disabledAlpha" android:color="?android:colorForeground"/>
    <item android:alpha="?secondaryContentAlpha" android:color="?android:colorForeground"/>
</selector>
Другие вопросы по тегам