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

Joh*_*ann 292 android hex colors

我想使用六角形字符串中的颜色,例如"#FFFF0000"更改布局的背景颜色. Color.HSVToColor看起来像赢家,但它需要float[]一个参数.

我是否接近解决方案?

jet*_*hro 571

尝试Color类方法:

public static int parseColor (String colorString)
Run Code Online (Sandbox Code Playgroud)

来自Android文档:

支持的格式为:#RRGGBB #AARRGGBB'red','blue','green','black','white','grey','cyan','magenta','yellow','lightgray','darkgray "

  • 是的,只需:```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)}```,如果我错了请纠正我 (5认同)
  • 要添加到@ xdevs23代码,请将if条件更改为:if(colorString.length()== 4 && colorString [0] =='#')` (5认同)
  • 谁知道如何解析`#000`值? (4认同)
  • 如果您不仅显示函数,而且显示如何使用它,您的答案会更好: MyView.setBackgroundColor(Color.parseColor("#123456"); (3认同)

inv*_*sbo 239

尝试:

myLayout.setBackgroundColor(Color.parseColor("#636161"));
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用xamarin ..代码是这个Android.Graphics.Color.ParseColor("#636161")与"P"到上部 (2认同)

Sur*_*gch 34

这个问题出现在与十六进制颜色相关的一些搜索中,所以我将在这里添加一个摘要.

来自int的颜色

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

int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);
Run Code Online (Sandbox Code Playgroud)

字符串的颜色

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

int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
Run Code Online (Sandbox Code Playgroud)

请注意,String必须以a开头#.这两个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>
Run Code Online (Sandbox Code Playgroud)

如果您需要其他颜色,最好遵循的方法是在xml中分两步定义颜色.首先命名十六进制值颜色,然后命名应该获得特定颜色的应用程序组件.这样可以在以后轻松调整颜色.同样,这是在colors.xml中.

<color name="orange">#fff3632b</color>
<color name="my_view_background_color">@color/orange</color>
Run Code Online (Sandbox Code Playgroud)

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

int myColor = ContextCompat.getColor(context, R.color.my_view_background_color);    
myView.setBackgroundColor(myColor);
Run Code Online (Sandbox Code Playgroud)

Android预定义颜色

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

int myColor = Color.BLUE;
myView.setBackgroundColor(myColor);
Run Code Online (Sandbox Code Playgroud)

其他颜色

  • Color.BLACK
  • Color.BLUE
  • Color.CYAN
  • Color.DKGRAY
  • Color.GRAY
  • Color.GREEN
  • Color.LTGRAY
  • Color.MAGENTA
  • Color.RED
  • Color.TRANSPARENT
  • Color.WHITE
  • Color.YELLOW

笔记


Bry*_*eld 22

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

String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);
Run Code Online (Sandbox Code Playgroud)

16表示它是十六进制而不是常规0-9.结果应该是相同的

int color = 0xFFFF0000;
Run Code Online (Sandbox Code Playgroud)


Pat*_*cia 16

它的

int color =  Color.parseColor("colorstring");
Run Code Online (Sandbox Code Playgroud)


Min*_*ain 15

试试这个:

vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
Run Code Online (Sandbox Code Playgroud)


Opy*_*Opy 11

我使用它,它对我来说非常适合设置我想要的任何颜色.

public static final int MY_COLOR = Color.rgb(255, 102, 153);
Run Code Online (Sandbox Code Playgroud)

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

只需在Google上搜索颜色图表,就可以使用0-255找到包含正确RGB代码的图表.


小智 10

尝试这个

int colorInt = Color.parseColor("#FF00FFF0");
bg.setBackgroundColor(colorInt);
Run Code Online (Sandbox Code Playgroud)

其中 bg 是要为其设置背景颜色的视图或布局。


Sha*_*ram 7

在Xamarin中使用此

Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
Run Code Online (Sandbox Code Playgroud)


AZ_*_*AZ_ 6

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <color name="translucent_red">#80ff0000</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

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

Resources res = getResources();
int color = res.getColor(R.color.opaque_red);
Run Code Online (Sandbox Code Playgroud)

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

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/translucent_red"
    android:text="Hello"/>
Run Code Online (Sandbox Code Playgroud)


Dav*_*ong 5

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

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