如何从十六进制颜色字符串获取颜色

366

我想使用一个类似于 "#FFFF0000" 的十六进制字符串中的颜色来改变布局的背景颜色。

Color.HSVToColor 看起来是一个不错的选择,但它需要一个 float[] 参数。

我离解决方案还有多远?


可能是将Android颜色字符串在运行时转换为整数的重复问题。 - Shubham A.
15个回答

676

尝试使用Color类方法:

public static int parseColor (String colorString)

来自Android文档

支持的格式有:#RRGGBB #AARRGGBB 'red'、'blue'、'green'、'black'、'white'、'gray'、'cyan'、'magenta'、'yellow'、'lightgray'、'darkgray'

AndroidX:String.toColorInt()


5
有人知道如何解析 #000 值吗? - Alex Semeniuk
9
是的,请执行以下操作:if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 2), 2) + StringUtils.repeat(colorString.substring(2, 3), 2) + StringUtils.repeat(colorString.substring(3, 4), 2) },如果我有错误,请纠正我。 - xdevs23
6
为了添加到@xdevs23的代码中,请将if条件更改为:if(colorString.length() == 4 && colorString[0] == '#')。请注意,翻译过程中不会添加解释或其他额外内容。 - Zac
4
如果您不仅展示函数,还说明如何使用它,那么您的回答会更好: MyView.setBackgroundColor(Color.parseColor("#123456"); 意思是:通过调用该函数,可以将MyView的背景色设置为十六进制颜色代码"#123456"所代表的颜色。 - Yvonne Marggraf
int red = colorString.charAt(1) == '0' ? 0 : 255; int blue = colorString.charAt(2) == '0' ? 0 : 255; int green = colorString.charAt(3) == '0' ? 0 : 255; Color.rgb(red, blue, green); - GTID
显示剩余3条评论

290

尝试:

myLayout.setBackgroundColor(Color.parseColor("#636161"));

5
如果你正在使用Xamarin,那么代码是这样的:Android.Graphics.Color.ParseColor("#636161"),其中将"P"转换为大写字母。 - Igor Monteiro

61

这个问题与十六进制颜色相关,因此我将在这里添加一个摘要。

从int获取颜色

十六进制颜色采用RRGGBBAARRGGBB(透明度、红、绿、蓝)的形式。根据我的经验,当直接使用int时,需要使用完整的AARRGGBB格式。如果您只有RRGGBB格式,则只需在前面加上FF,以使 alpha (透明度) 完全不透明。以下是如何在代码中设置它。在开头使用0x表示它是十六进制而不是十进制。

int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);

从字符串中获取颜色

正如其他人所指出的那样,您可以像这样使用Color.parseColor

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
注意字符串必须以 # 开头,支持 RRGGBBAARRGGBB 格式。

从 XML 中获取颜色

尽可能从 XML 中获取您的颜色。这是推荐的选项,因为它使得更改应用程序颜色变得更加容易。如果您在代码中设置了许多十六进制颜色,那么稍后尝试更改它们会非常麻烦。 Android 材料设计具有已经配置了十六进制值的颜色调色板。 这些主题颜色在您的应用程序中使用,并且看起来像是这样:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FF4081</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#757575</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#BDBDBD</color>
</resources>

如果你需要额外的颜色,一个好的实践方法是在xml中分两步定义你的颜色。首先命名十六进制值的颜色,然后为应该获得某个特定颜色的应用程序组件命名。这样可以更容易地调整颜色。再次强调,这在colors.xml中。

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>

然后,当你想在代码中设置颜色时,请执行以下操作:

int myColor = ContextCompat.getColor(context, R.color.my_view_background_color);    
myView.setBackgroundColor(myColor);

Android预定义颜色

Color类带有许多预定义的颜色常量,您可以像这样使用它。

int myColor = Color.BLUE;
myView.setBackgroundColor(myColor);

其他颜色包括:

  • Color.BLACK黑色
  • Color.BLUE蓝色
  • Color.CYAN青色
  • Color.DKGRAY深灰色
  • Color.GRAY灰色
  • Color.GREEN绿色
  • Color.LTGRAY浅灰色
  • Color.MAGENTA洋红色
  • Color.RED红色
  • Color.TRANSPARENT透明色
  • Color.WHITE白色
  • Color.YELLOW黄色

注意事项


24

将该字符串转换为可用于setBackgroundColorsetTextColorint颜色值。

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);

16表示它是十六进制而不是普通的0-9。结果应该与

相同。

int color = 0xFFFF0000;

如何将字符串颜色 ="80000000"; 转换为整数颜色=? - Ashish Sahu
我认为字符串版本应该是#80000000,这种情况下整数版本将是int color = 0x80000000;。如果这不起作用,请发布一个新问题,提供更多细节,以便比我更多的人会注意到它。请记住,#80000000是半透明黑色。 - 700 Software
我知道int会是int color = 0x80000000,但我的问题是如何转换它...但现在我将通过int color = parseColor("#" + "80000000")自己解决我的问题...谢谢回复。 - Ashish Sahu
我在使用你的代码时遇到了异常:java.lang.NumberFormatException: Invalid int: "FFFF0000"。 - novas1r1

16

这是

int color =  Color.parseColor("colorstring");

15

试试这个:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));

12

我使用这个方法,它对于设置任何我想要的颜色非常有效。

public static final int MY_COLOR = Color.rgb(255, 102, 153);

使用 0-255 来设置红色、绿色和蓝色的颜色,然后在任何需要使用该颜色的地方,只需将 MY_COLOR 放在 Color.BLUE 或 Color.RED 等其他静态颜色的位置即可。

只需进行 Google 搜索即可找到带有正确 RGB 代码的颜色图表,使用 0-255。


10

试试这个

int colorInt = Color.parseColor("#FF00FFF0");
bg.setBackgroundColor(colorInt);

bg是一个视图或布局,您希望设置其背景颜色。


6
在Xamarin中使用这个。
Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));

5
尝试使用0xFFF000,并将其传递给Color.HSVToColor方法。

2
我认为你应该用零替换第三个F。在原始帖子中,我认为前两个F字符用于设置不透明度。 - 700 Software

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