簡體   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