创建一个新的彩色可绘制对象。

95
我想将十六进制值转换为整数,以便创建新的颜色可绘制对象。根据文档,这似乎是可能的。文档明确要求:

public ColorDrawable (int color)

自API级别1添加:使用指定的颜色创建一个新的ColorDrawable。

参数 color 要绘制的颜色。

所以,我的代码出现了“无效int:“FF6666””的错误。有什么想法吗?

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

如果提供的答案中有一个解决了您的问题,请考虑将其验证为已接受的答案,以便其他人知道您的问题已解决。 - HpTerm
有一个不错的实用类 android.graphics.Color,其中有一个方法 parseColor。尝试使用它,不要忘记在颜色字符串表示中添加井号(#)前缀,例如 #FF6666。 - Игорь Комаров
7个回答

193

由于你在讨论十六进制,所以必须以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)

22
我需要的是 new ColorDrawable(getResources().getColor(R.color.red))),谢谢。该代码用于在Android应用程序中设置红色背景颜色。 - shareef
9
为了兼容性,使用ContextCompat.getColor(getContext(),R.color.red)获取颜色。 - loshkin
我们可以通过使用类型为ColorDrawable的变量cd来更改背景颜色吗? - user6434985
顺便提一下,您可以使用ColorDrawable来为需要Drawable的对象(例如DividerItemDecoration.setDrawable())设置颜色,而不是使用实际的drawable布局。这样,您只需传递一个ColorDrawable即可更改分隔符的颜色。 - 6rchid

30

要在使用ContextCompat时重复使用颜色,您可以这样做:

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

“this” 是什么意思? - Christian
@Christian 上下文 - JpCrow

10

应该像这样...

ColorDrawable cd = new ColorDrawable(0xffff6666);

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


但是你希望将这些值放在适当的“res”文件中,而不是硬编码。Enrichman的答案很完整 :) - aMiGo
cd在与Toast相关的情况下应该如何使用? - Azurespot

9

如果按照上述建议,这个问题的总结如下:

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

选哪种方法由您决定!


如果我有一个颜色数组,那么? - Prince Dholakiya
1
@DPrince,你可以尝试这样做: int color = Color.HSVToColor(new float[]{...}) 然后使用上面的代码。 - BertKing

4
我认为您需要使用以下方法:

public static int parseColor (String colorString)

API级别1中添加。解析颜色字符串并返回相应的颜色整数。如果无法解析字符串,将抛出IllegalArgumentException异常。支持的格式有:#RRGGBB #AARRGGBB red、blue、green、black、white、gray、cyan、magenta、yellow、lightgray、darkgray、grey、lightgrey、darkgrey、aqua、fuschia、lime、maroon、navy、olive、purple、silver、teal。


请注意不要删除HTML标记。

1

这是我将十六进制颜色转换为整数并应用于视图背景的方法。

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

1)十六进制转整数

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

2) 设置背景

view.setBackgroundColor(context.getColor(myColor));

1
(context.getColor(myColor) 你是认真的吗?! (context.getColor(COLOR_RESOURCE_ID),它是资源颜色ID。 - user924
你是什么意思?@user924 - Rohit Singh

0

Xamarin/Maui:

  protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);      

        Window.SetBackgroundDrawable(new ColorDrawable(ColorExtensions.ToAndroid(Colors.Black)));
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接