如何将R.color转换为Color?

17

Android有两种类型的颜色:R.colorcolor 布局使用R.color(我需要holo_blue_light: 17170450 (0x01060012)

但是函数(例如setColor())采用另一种类型的输入整数(即CYAN: -16711681 (0xff00ffff))。

R.color取反会返回不正确的颜色。我应该怎么做才能将它们转换呢?


1
在导入区域中,您看到了 android.R 的导入,请将其删除,它将正常工作。 - Chintan Khetiya
5个回答

23

由于 getResources().getColor 已被弃用,您可以使用:

ContextCompat.getColor(getResources(), R.color.idOfColour)

旧答案

使用

 getResources().getColor(R.color.idOfColour);

该函数返回你所要查找的颜色的int值。如果这个颜色是Android平台默认提供的,你可以使用android.R.color.colorId获取其ID。


废弃的,而且整个从R.color转换为颜色代码#xxxxxx的API过程非常繁琐,以至于硬编码颜色代码似乎更好。为什么这么复杂? - carl
@carl 感谢您指出这一点。它并不复杂。废弃的原因是颜色可以与上下文主题进行样式设置。 - Blackbelt
在你掌握它之前,这个函数并不复杂。关于这个函数有很多讨论帖子,应该是超级简单的,但实际上却像安卓时间窃贼花园里的另外三个一样令人困扰。对于这个严厉的评判,我感到抱歉 :-) 我建议明显的解决方案应该是一个聚合级别,可以接受R.color作为输入参数。这样我们就可以节省时间了。 - carl
一个int就是一个int。你如何区分int资源和int颜色? - Blackbelt

3
  1. 您可以通过

    getResources().getColor(R.color.color_id);

    从资源中获取颜色。

  2. 如果您保存了一个视图的颜色(例如背景色或文字颜色),则您可以使用以下方式获取该颜色(类似于您的第二个示例):

Color.parseColor(String color)


2

1
为什么不尝试以下方式解析颜色?
int colorCode = Color.parseColor("#ffffff") ;
setColor(colorCode) ;

1

我还想补充一件事

int color_int = ContextCompat.getColor(context, R.color.your_color);
Color colorName = new Color(color_int );

您可以随意使用 colorName

对我不起作用。似乎没有带有int的颜色初始化器。 - Manuel

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