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

时间:2011-03-09 16:10:29

标签: android colors hex

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

我是否接近解决方案?

14 个答案:

答案 0 :(得分:538)

尝试Color类方法:

public static int parseColor (String colorString)

来自Android documentation

  

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

答案 1 :(得分:221)

尝试:

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

答案 2 :(得分:27)

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

来自int的颜色

十六进制颜色采用RRGGBBAARRGGBB(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

注释

答案 3 :(得分:21)

将该字符串转换为int颜色,可在setBackgroundColorsetTextColor

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

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

相同
int color = 0xFFFF0000;

答案 4 :(得分:13)

这是

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

答案 5 :(得分:12)

试试这个:

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

答案 6 :(得分:10)

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

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 :(得分:5)

保存在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>

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

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"/>

答案 8 :(得分:4)

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

答案 9 :(得分:4)

在Xamarin 使用此

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

答案 10 :(得分:3)

如果您在XML中定义颜色并希望使用它来更改背景颜色或某些内容,则此API就是您正在寻找的颜色:

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

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

答案 11 :(得分: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);

答案 12 :(得分:0)

没有预定义的类可以直接实现从十六进制代码到颜色名称,所以你要做的就是尝试简单的键值对概念,遵循这个代码。

String hexCode = "Any Hex code" //#0000FF

HashMap<String, String> color_namme = new HashMap<String, String>();
                        color_namme.put("#000000", "Black");
                        color_namme.put("#000080", "Navy Blue");
                        color_namme.put("#0000C8", "Dark Blue");
                        color_namme.put("0000FF", "Blue");
                        color_namme.put("000741", "Stratos");
                        color_namme.put("001B1C", "Swamp");
                        color_namme.put("002387", "Resolution Blue");
                        color_namme.put("002900", "Deep Fir");
                        color_namme.put("002E20", "Burnham");
                        for (Map.Entry<String, String> entry : color_namme.entrySet()) {
                            String key = (String) entry.getKey();
                            String thing = (String) entry.getValue();
                            if (hexCode.equals(key))
                                Color_namme.setText(thing); //Here i display using textview


                        }

答案 13 :(得分:0)

我已经创建了一个完整的答案:

    /**
     * Input: Hex Value of ARGB, eg: "#FFFF00FF", "#FF00FF", "#F0F"
     * Output:  Float Color Array with  with red, green,
     * blue and alpha (opacity) values,
     * eg:  floatArrayOf(0.63671875f, 0.76953125f, 0.22265625f, 1.0f)
     */
    private fun getFloatArrayFromARGB(argb: String): FloatArray {
        val colorBase: Int = if (argb.length == 4) {
            val red = if (argb[1] == '0') 0 else 255
            val green = if (argb[2] == '0') 0 else 255
            val blue = if (argb[3] == '0') 0 else 255
            Color.rgb(red, green, blue)
        } else {
            Color.parseColor(argb)
        }
        val red = Color.red(colorBase)
        val green = Color.green(colorBase)
        val blue = Color.blue(colorBase)
        val alpha = Color.alpha(colorBase)
        return floatArrayOf(
            red / 255f,
            green / 255f,
            blue / 255f,
            alpha / 255f
        )
    }

用法

   private val colorValue = getFloatArrayFromARGB("#F0F")

希望对大家有所帮助