Support library for text color behaviour of API 26?

前端 未结 1 1848
南旧
南旧 2021-01-22 15:51

API 26 introduces an advanced color calculation for ?textColorPrimary based on ?colorForeground. It makes use of states, primaryContentAlpha

相关标签:
1条回答
  • 2021-01-22 16:51

    @eugen-pechanec is hinting that the attributes primaryContentAlpha and scondaryContentAlpha are missing, IMHO below API 26. Should we call this a bug or a missing back port? Don't know.

    The consequence is that you can't use the setting ?attr/colorForeground as a default to automatically create all foreground colours out of the box. You basically have two options, either not to use it to to do a manual back port.

    Disable colorForeground

    Instead of generating the colours from ?attr/colorForeground you set the attributes android:textColorPrimary and android:textColorSecondary directly. This will be the best choice in most cases.

    Backport colorForeground

    If you plan to use a lot of different themes, you want to enable the feature to set defaults for all text colours in a central place. Then you have to implement the behaviour of API 26 in your root theme.

    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>
    
    0 讨论(0)
提交回复
热议问题