89

我正在尝试将十六进制值转换为 int,以便创建新的可绘制颜色。我不确定这是否可行,但根据文档,它应该。它明确要求

公共 ColorDrawable (int color)

在 API 级别 1 中添加 创建具有指定颜色的新 ColorDrawable。

参数 color 要绘制的颜色。

所以,我的代码不起作用,因为我收到 Invalid int: "FF6666" 错误。有任何想法吗?

int decode = Integer.decode("FF6666");
ColorDrawable colorDrawable = new ColorDrawable(decode);
4

6 回答 6

184

由于您在谈论十六进制,因此您必须0x从不忘记不透明度开始。

所以基本上:0xFFFF6666

ColorDrawable cd = new ColorDrawable(0xFFFF6666);

您还可以在 /res 中创建一个新的 colors.xml 文件并定义颜色,例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="mycolor">#FF6666</color>
</resources>

并简单地获取 R.color.mycolor 中定义的颜色

getResources().getColor(R.color.mycolor)
于 2013-10-16T15:44:20.903 回答
27

要与 ContextCompat 一起使用并重新使用颜色,您可以执行以下操作:

ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white));
于 2016-05-18T14:54:51.737 回答
10

应该是这样的……

ColorDrawable cd = new ColorDrawable(0xffff6666);

注意我使用了 8 个十六进制数字,而不是 6 个十六进制数字。这增加了透明度

于 2013-10-16T15:46:03.423 回答
7

按照上面的建议,对这个问题做个总结:

  1. ColorDrawable colorDrawable = new ColorDrawable( Color.parseColor ("#ce9b2c"));`

  2. ColorDrawable colorDrawable = new ColorDrawable( 0xFFCE9B2C ); 请注意,有 8 个十六进制数字,而不是 6 个十六进制数字,这不起作用。全部案例

  3. ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(mContext,R.color.default_color));

任你挑选!

于 2017-12-05T09:11:55.113 回答
4

我认为你必须使用:

公共静态 int parseColor (String colorString)

在 API 级别 1 中添加了解析颜色字符串,并返回相应的颜色整数。如果无法解析字符串,则抛出 IllegalArgumentException 异常。支持的格式有:#RRGGBB #AARRGGBB 红色、蓝色、绿色、黑色、白色、灰色、青色、洋红色、黄色、浅灰色、深灰色、灰色、浅灰色、深灰色、浅绿色、紫红色、石灰、栗色、海军蓝、橄榄色、紫色、银色,青色

于 2013-10-16T15:44:43.217 回答
2

这就是我将十六进制颜色转换为 int 并应用于视图背景的方式

假设我们有一个颜色#8080000。

1) 十六进制到整数的转换

int myColor = Color.parseColor("#808000");

2) 设置背景

view.setBackgroundColor(context.getColor(myColor));
于 2018-11-04T19:28:51.387 回答