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颜色计算?
答案 0 :(得分:0)
@ eugen-pechanec暗示缺少primaryContentAlpha
和scondaryContentAlpha
属性,恕我直言API 26以下。我们应该称这是一个错误还是缺少后端口?不知道。
结果是您无法使用设置?attr/colorForeground
作为默认设置来自动创建开箱即用的所有前景色。你基本上有两个选择,要么不用它来做手动后端口。
colorForground
您可以直接设置属性?attr/colorForeground
和android:textColorPrimary
,而不是从android:textColorSecondary
生成颜色。在大多数情况下,这将是最佳选择。
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>