Поддержка библиотеки для поведения цвета текста API 26? - PullRequest
0 голосов
/ 23 мая 2018

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 Ответ

0 голосов
/ 23 мая 2018

@ 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>
...