Android SDK 23中ColorStateList中的主题属性颜色参考不起作用

问题描述

我遇到有关Android SDK 23(测试设备:具有Android 6.0的Huawei Honor 6(H60-L04))的问题。

我遵循Google的建议(12),并通过主题属性引用颜色。 但是colorStateLists中用于设置Alpha值的颜色无法正确解析。

这就是我要做

int textColor = getColorFromThemeAttr(context,R.attr.textColordisappeared);
someTextView.setTextColor(textColor);
public static int getColorFromThemeAttr(Context context,int colorResId) {
  TypedValue typedValue = new TypedValue();
  TypedArray typedArray = context.obtainStyledAttributes(typedValue.data,new int[] {colorResId});
  int color = typedArray.getColor(0,Color.CYAN);
  typedArray.recycle();
  return color;
}

res / values / themes / themes.xml

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

    <style name="Theme.App.Setup" parent="Theme.AppCompat.DayNight.NoActionBar">
        [...]
        <item name="textColordisappeared">@color/color_on_surface_alpha_30</item>
        <item name="colorOnSurface">@color/black</item>
        [...]
    </style>
</resources>

res / color / color_on_surface_alpha_30.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:color="?attr/colorOnSurface" android:alpha="0.3" />
</selector>

最后是res / values / colors.xml

[...]
<color name="black">#000000</color>
[...]

在其他测试设备上,它可以正常工作,但是在该设备上,颜色解析为红色(#FF0000),该颜色在应用程序中的任何地方都没有使用。有人对此有想法吗?还是只是SDK中的错误


顺便说一句::我将android:alpha vlaue设置为还引用了主题属性

android:alpha="?android:disabledAlpha"

与此相关的应用程序因ErrorLog崩溃

android.content.res.Resources$NotFoundException: File res/color/tentacle_color_on_surface_alpha_30.xml from color state list resource ID #0x7f0600da
        at android.content.res.Resources.loadColorStateList(Resources.java:2910)
        at android.content.res.HwResources.loadColorStateList(HwResources.java:743)
        at android.content.res.TypedArray.getColor(TypedArray.java:460) 

将值设置为固定的浮点数(例如0.3)即可。因此,看来该SDK模具没有android:disabledAlpha的值。

Android Styling: Prefer Theme Attributes Developing Themes with Style (Android Dev Summit '19)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)