我想使用主题中的颜色将其应用于我的应用渲染的某些HTML。我想知道我能不能这样做?
我希望使用在themes.xml中指定的颜色:
<item name="colorBackground">@android:color/background_dark</item>
<item name="textColorPrimary">@android:color/primary_text_dark</item>
所以看着他们,他们以同样的方式宣告。所以我想我也可以用同样的方式访问它们。
但这不是原因。尝试以这种方式访问这些值时:
TypedValue tv = new TypedValue();
getTheme().resolveAttribute(android.R.attr.colorBackground, tv, true);
System.out.println("tv.string=" + tv.string);
System.out.println("tv.coerced=" + tv.coerceToString());
int colorResourceId = getResources().getColor(tv.resourceId);
System.out.println("colorResourceId=" + colorResourceId);
tv = new TypedValue();
getTheme().resolveAttribute(android.R.attr.textColorPrimary, tv, true);
System.out.println("tv.string=" + tv.string);
System.out.println("tv.coerced=" + tv.coerceToString());
colorResourceId = getResources().getColor(tv.resourceId);
System.out.println("colorResourceId=" + colorResourceId);
我得到了这个结果:
I/System.out( 1578): tv.string=null
I/System.out( 1578): tv.coerced=#ffffffff
I/System.out( 1578): colorResourceId=-1
I/System.out( 1578): tv.string=res/color/primary_text_light.xml
I/System.out( 1578): tv.coerced=res/color/primary_text_light.xml
I/System.out( 1578): colorResourceId=-16777216
结果不同。第一个实际上给了我“#fffffff”的颜色,这对我有用,第二个只给我一个xml。
我是否需要在这里跳过几个箍来解决实际的颜色?我的初衷是否有用?也许它不会起作用,因为颜色可以是任意的可绘制的?
我没有找到任何相关的文档,但如果您知道,请告诉我那里。
顺便说一下。我也尝试过getsStyledAttributes(),但这基本上都有相同的问题。
答案 0 :(得分:6)
我认为您应该将colorResourceId
重命名为myColor
或类似的内容,因为就我所知,这应该是代码中的内容。
-16777216相当于0xFF000000,这是黑色,所以你的主题可能是白色背景上的黑色文字。