创建一个新的可绘制颜色


76

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

公共ColorDrawable(int颜色)

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

参数 color 绘制的颜色。

因此,我的代码无法正常工作,因为我收到一个无效的int:“ FF6666”错误。有任何想法吗?

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

如果提供的答案之一解决了您的答案,请考虑将其验证为可接受的答案,以便其他人知道您的问题已解决。
HpTerm

有一个不错的实用程序类android.graphics.Color,它具有方法parseColor。尝试使用它,而不是不要忘了尖锐(#)前缀附加到你的颜色字符串表示,例如#FF6666
ИгорьКомаров

Answers:


161

因为您在谈论十六进制,所以您必须从头开始,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)

18
我需要的是 new ColorDrawable(getResources().getColor(R.color.red)))谢谢
shareef 2015年

8
ContextCompat.getColor(getContext(),R.color.red)用于
兼容性

我们可以通过使用此CD更改背景颜色吗,它是colorDrawable类型变量

附带一提,您可以将ColorDrawable用于需要Drawable的对象,例如DividerItemDecoration.setDrawable();。可以使用ColorDrawable来更改分隔线的颜色,而不是使用实际的drawable布局。
6rchid

20

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

ColorDrawable colorDrawable = new ColorDrawable(ContextCompat.getColor(this, R.color.white));

什么意思用this
基督教徒

@Christian Context
JpCrow

10

应该是这样的...

ColorDrawable cd = new ColorDrawable(0xffff6666);

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


但是您希望在适当的“ res”文件中具有此类值,而不是硬编码。Enrichman的回答是完整的:)
aMiGo 2014年

cd相对于如何使用Toast
Azurespot 2015年

4

我认为您必须使用:

public static int parseColor(字符串colorString)

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


4

通过遵循以上建议,可以总结出这个问题:

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

选择由您决定!


如果我有一个颜色数组,那?
Dholakiya王子18年

1
@DPrince,您可以尝试一下,int color = Color.HSVToColor(new float[]{...}) 然后在上面使用。
BertKing

1

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

假设我们的颜色为#8080000。

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

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

2)设置背景

view.setBackgroundColor(context.getColor(myColor));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.