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


Answers:


592

尝试Color类方法:

public static int parseColor (String colorString)

Android文档

支持的格式为:#RRGGBB #AARRGGBB'红色','蓝色','绿色','黑色','白色','灰色','青色','品红色','黄色','浅灰色','darkgray' '


4
有人知道如何解析#000值吗?
Alex Semeniuk 2015年

6
是的,只需执行以下操作:if(colorString.length() == 4) { colorString = "#" + StringUtils.repeat(colorString.substring(1, 1), 1) + StringUtils.repeat(colorString.substring(2, 2), 1) + StringUtils.repeat(colorString.substring(3, 3), 1) },如果我错了,请纠正我
xdevs23

6
要添加到@ xdevs23代码,请将if条件更改为:if(colorString.length() == 4 && colorString[0] == '#')
Zac

如果您不仅显示函数,而且还显示函数,那么您的答案会更好:MyView.setBackgroundColor(Color.parseColor(“#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(红色,蓝色,绿色);
GTID

253

尝试:

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

4
如果您正在使用xamarin ..代码是这样的Android.Graphics.Color.ParseColor(“#636161”)与“P”到上
伊戈尔·蒙泰罗

38

这个问题是针对与十六进制颜色相关的大量搜索提出的,因此我将在此处添加摘要。

来自int的颜色

十六进制颜色采用RRGGBB或的形式AARRGGBB(alpha,红色,绿色,蓝色)。以我的经验,int直接使用时,您需要使用完整AARRGGBB表格。如果只有RRGGBB表单,则只需FF给它加上前缀以使Alpha(透明度)完全不透明。这是您在代码中进行设置的方式。0x在开头使用表示它是十六进制而不是10。

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

字符串颜色

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

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

笔记


22

将该字符串转换为int可以在setBackgroundColor和中使用的颜色setTextColor

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

16表示它是十六进制,而不是常规的0-9。结果应与

int color = 0xFFFF0000;

我该如何转换String color =“ 80000000”; 诠释颜色=?
Ashish Sahu 2014年

我认为字符串版本应该是#80000000int版本int color = 0x80000000;。如果这样不起作用,则发布一个包含更多详细信息的新问题,这样比我更多的人会注意到它。记住#80000000是半透明的黑色。
布莱恩·菲尔德

我知道int将会是int color = 0x80000000,但是我的问题是如何转换它...但是现在我将用int color = parseColor(“#” +“ 80000000”); ...来解决我的问题self ....感谢答复。
Ashish Sahu 2014年

我使用您的代码遇到了异常:java.lang.NumberFormatException:无效的int:“ FFFF0000”
error1337



12

我使用它,对我设置所需的任何颜色都非常有用。

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

为每个红色,绿色和蓝色使用0-255设置颜色,然后在要使用该颜色的任何地方仅放置MY_COLOR而不是Color.BLUE或Color.RED或Color类提供的任何其他静态颜色。

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


7

在Xamarin中使用此

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));

6

XML文件保存在res / values / colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>

此应用程序代码检索颜色资源:

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);

此布局XML将颜色应用于属性:

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>

5

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


2
我希望您应该将第三个F替换为零。在OP中,我认为前两个F字符用于设置不透明度。
Bryan Field

4

如果您在XML中定义了一种颜色,并希望使用它来更改背景色或其他您正在寻找的API,那么该API就是您想要的一种:

 ((TextView) view).setBackgroundResource(R.drawable.your_color_here);

在我的示例中,我将其用于TestView


0

对于缩短的十六进制代码

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, green,blue);
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.