来自资源的java意外颜色值。主题分解属性
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TypedValue color = new TypedValue();
getTheme().resolveAttribute(安卓.R.attr.textColorSecondary, color, true);
Toast.makeText(this, String.format("%x", color.data), Toast.LENGTH_LONG).show();
}
这段代码应该制作一个显示次要文本颜色的祝酒词。如果我把它放在我以前的一个应用程序中,它会像预期的那样显示ffaaaaaa
。如果我制作一个新的应用程序,同样的代码会显示a07
。这显然是错误的;如果我尝试使用它作为颜色,我会看到不可见的视图,因为第一个字节(alpha)是0。这是怎么回事
两个应用程序都使用:
compileSdkVersion 29
buildToolsVersion '29.0.2'
minSdkVersion 21
targetSdkVersion 29
编辑:
我试着在另一部手机上运行新的应用程序,结果显示aaa
。这很有趣,因为颜色#aaa
相当于#ffaaaaaa
。TypedValue有一个type
字段,在新应用程序(value=0xaaa)上是TYPE_字符串,但在旧应用程序(value=0xffaaaaa)上是TYPE_INT_COLOR_RGB4。似乎新的应用程序正在将值解释为字符串而不是颜色。现在我知道出了什么问题,但不知道为什么,也不知道该怎么办
# 1 楼答案
这不是我所希望的解决方案,但如果我手动将textColorSecondary设置为我的应用程序的样式,并确保使用活动上下文而不是应用程序上下文检索它,它会按预期工作
风格。xml: