繁体   English   中英

如何在android中获取当前主题的文本颜色?

[英]How to get text color for current theme in android?

我正在尝试在我的 Java 代码中检索文本颜色

    TypedValue typedValue = new TypedValue();
    context.getTheme().resolveAttribute(android.R.attr.textColor, typedValue, true);
    int color = typedValue.data;

参考thisthis问题。

但是我一直得到 1637 但是当我在 textview Shader textView.getPaint().setShader(Gradient...)上设置它时,这种颜色看起来是透明的。

如何解决这个问题?

我们习惯于看到以十六进制形式表示的颜色,如#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% 的不透明。 这与您在着色器中使用此颜色时看到的透明颜色相匹配。

如果我运行您的代码,每次更改样式文件中的颜色时,都会得到不同的值。 例子:

-15658735 用于 hexcolor #111111

-16777216 用于 hexcolor #000000

-1 表示十六进制颜色 #ffffff

所以它正在工作,但我不知道该颜色是如何“格式化”的。 也许它只是对包含实际颜色代码的样式值的某种引用。 如果我像这样运行您的代码,它确实会按照应有的方式更改文本颜色。

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);

我正在尝试在Java代码中检索文本颜色

    TypedValue typedValue = new TypedValue();
    context.getTheme().resolveAttribute(android.R.attr.textColor, typedValue, true);
    int color = typedValue.data;

在参考这个这个问题。

但是我一直都得到1637,但是当我在textview Shader textView.getPaint().setShader(Gradient...)其设置为textView.getPaint().setShader(Gradient...)此颜色看起来是透明的。

怎么解决呢?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM