如何从十六进制颜色获取前景色?

时间:2013-06-11 17:27:59

标签: android string colors hex foreground

如果我知道该颜色的十六进制颜色,我需要知道如何获取前景色的代码。

<string name="name">Asavbasb <font fgcolor="#33b5e5">look</font></string>

这是我的十六进制#33b5e5颜色的代码,但如果我在fgcolor="33b5e5"中使用它,所选文本是白色而不是蓝色,所以我的问题是如何获取该前景色的代码?

4 个答案:

答案 0 :(得分:1)

而不是上述,为什么不使用fromHTML功能?

类似的东西:

myTextView.setText(Html.fromHtml("Asavbasb <font fgcolor='#33b5e5'>look</font>"));

或者,如果您确实需要颜色代码,可以使用Color.parseColor(String);

获取颜色代码

答案 1 :(得分:1)

您是否尝试过将颜色更改为fgcolor="#ff33b5e5"

我认为使用Android内联颜色,您需要声明Alpha通道。

答案 2 :(得分:0)

这是如何从十六进制字符串创建颜色并将其影响到TextView

final int color = Color.parseColor("#33b5e5");
final TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(color);

答案 3 :(得分:0)

在4.x之前,你可以这样做:

<string name="error"><font fgcolor="#ff33b5e5">Error!</font></string>

然而,bug https://code.google.com/p/android/issues/detail?id=58192打破了这个功能,因为它引入了一个整数解析器,无法处理具有最高位设置的数字,不幸的是你不能省略颜色的不透明部分(大多数人都会我喜欢在这个例子中设置为ff。)

我昨天刚刚学会了巧妙的解决方法。你所做的是否定二进制补码中的十六进制颜色值。如何执行此操作取决于您的十六进制计算器,但最简单的方法是从0x100000000中减去颜色。在您的情况下,这将导致0x100000000 - 0xff33b5e5 = 0xcc4a1b。 (或者你可以反转它,例如00cc4a1a,它足够接近)。然后用减号再次否定这一点:

<string name="error"><font fgcolor="-#cc4a1b">Error!</font></string>

和voilla!你有你想要的颜色。

感谢TWiStErRob在https://stackoverflow.com/a/11577658/338479

中搞清楚这一点

ETA:我刚刚发现如果你在2.x系统上这样做会导致你的应用程序崩溃;它抛出一个NumberFormat异常