如何从十六进制的颜色字符串中获取颜色
如何从十六进制颜色字符串中获取颜色
这个问题的出现是因为在与十六进制颜色相关的搜索中,经常会遇到这个问题。
从int获取颜色
十六进制颜色的格式为RRGGBB
或AARRGGBB
(alpha,red,green,blue)。根据我的经验,当直接使用int
时,你需要使用完整的AARRGGBB
格式。如果你只有RRGGBB
格式,那么只需在前面加上FF
来使alpha(透明度)完全不透明。下面是代码中如何设置颜色的方法。使用0x
表示十六进制,而不是十进制。
int myColor = 0xFF3F51B5; myView.setBackgroundColor(myColor);
从字符串获取颜色
正如其他人所指出的,你可以使用Color.parseColor
来获取颜色,如下所示:
int myColor = Color.parseColor("#3F51B5"); myView.setBackgroundColor(myColor);
注意,字符串必须以#
开头。支持RRGGBB
和AARRGGBB
格式。
从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">/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
注意事项
- 找到十六进制颜色的快速方法是在Gimp(或其他图像编辑软件)中打开颜色选择对话框。
- 材料设计中的标准不透明度级别
问题出现的原因:
问题的原因是在使用Xamarin开发时,获取十六进制颜色字符串的颜色时出现了错误。在Xamarin中,需要使用Android.Graphics.Color.ParseColor方法来解析颜色字符串,但是需要注意的是,方法中的"P"需要大写。
解决方法:
要解决这个问题,只需要将颜色字符串传递给Android.Graphics.Color.ParseColor方法,并确保"P"是大写的即可。以下是示例代码:
myLayout.setBackgroundColor(Color.parseColor("#636161"));
如果在Xamarin中使用,代码如下:
myLayout.setBackgroundColor(Android.Graphics.Color.ParseColor("#636161"));
如何从十六进制颜色字符串获取颜色的问题?
在Android开发中,我们可以使用Color类的parseColor方法来获取颜色。该方法的定义如下:
public static int parseColor (String colorString)
根据Android文档的说明,该方法支持以下格式的颜色字符串:#RRGGBB、#AARRGGBB以及预定义的颜色名称,如'red'、'blue'、'green'、'black'、'white'等。
除了使用Color类的parseColor方法,我们还可以使用AndroidX库中的String.toColorInt()方法来获取颜色。
如果要解析类似于#000的值,可以通过以下代码实现:
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) }
另外,为了避免错误,我们可以将if条件修改如下:
if(colorString.length() == 4 && colorString[0] == '#')
如果想要更好地回答这个问题,不仅要展示函数的用法,还需要说明如何使用它。例如,可以通过以下代码将颜色设置为背景色:
MyView.setBackgroundColor(Color.parseColor("#123456"));
另外,我们还可以通过以下代码获取红、绿、蓝三个分量的值:
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);
通过以上方法,我们可以从十六进制颜色字符串中获取颜色,并进行相应的操作。