Java 如何在android中获取当前主题的文本颜色?
我试图在Java代码中检索文本颜色Java 如何在android中获取当前主题的文本颜色?,java,android,Java,Android,我试图在Java代码中检索文本颜色 TypedValue typedValue = new TypedValue(); context.getTheme().resolveAttribute(android.R.attr.textColor, typedValue, true); int color = typedValue.data; 参考文献和问题 但是一直以来我都得到1637,但是当我在textview着色器上设置它时,textview.getPaint().se
TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.textColor, typedValue, true);
int color = typedValue.data;
参考文献和问题
但是一直以来我都得到1637,但是当我在textview着色器上设置它时,textview.getPaint().setShader(Gradient…
这个颜色看起来是透明的
如何解决这个问题?如果我运行您的代码,每次更改样式文件中的颜色时,我都会得到不同的值。 示例: -15658735用于hexcolor#111111 -16777216用于hexcolor#000000 -1个用于hexcolor#ffffff 所以它是有效的,但我不知道颜色是如何“格式化”的。也许它只是对包含实际颜色代码的styles值的某种引用。 如果我像这样运行你的代码,它会改变文本的颜色
TypedValue typedValue = new TypedValue();
getTheme().resolveAttribute(android.R.attr.colorAccent, typedValue, true);
int color = typedValue.data;
TextView textView = findViewById(R.id.textView);
textView.setTextColor(color);
我们习惯于看到以十六进制形式表示的颜色,如
#RRGGBB
或#AARRGGBB
。然而,这些十六进制代码只是数字,您可以看到颜色值的十进制表示
如果在输出上使用Color.valueOf()
,您应该能够以预期的方式获得有关颜色的更多信息。对我来说,我想看看?colorAccent
的值,所以我写了以下内容:
val typedValue = TypedValue()
theme.resolveAttribute(R.attr.colorAccent, typedValue, true)
val color = Color.valueOf(typedValue.data)
println(color)
这是输出:
Color(0.84705883, 0.105882354, 0.3764706, 1.0, sRGB IEC61966-2.1)
这告诉我我的颜色是84.7%的红色,10.6%的绿色,37.6%的蓝色和100%的不透明度。我还可以使用快速扩展方法获取十六进制值:
private fun Color.toHexString(): String =
String.format("#%08X", toArgb())
这给了我十六进制字符串#FFD81B60
,它与我在颜色文件中看到的内容相匹配(尽管我指定它时没有alpha通道)
如果我用您的输出运行代码(
1637
),我会得到以下结果:
Color(0.0, 0.023529412, 0.39607844, 0.0, sRGB IEC61966-2.1)
(#00000665)
这告诉我你的颜色是0%红色,2.4%绿色,39.6%蓝色。。。但它也是0%不透明的。这与您在着色器中使用此颜色时将其视为透明的事实相匹配。color.valueOf需要API 26,我支持API 19+,您不需要在生产应用程序中实际使用
color.valueOf()。他的回答解决了问题,甚至解释了问题,你为什么不打勾?不,它解决不了问题。问题和答案在我的答案中有解释。我的回答也不完整。它只是说需要使用字符串颜色,但没有解释在使用reference而不是hex color时如何获取颜色,例如@android:color/white您能帮我吗-