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

16 浏览
0 Comments

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

我想使用十六进制字符串中的颜色,例如"#FFFF0000",来改变布局的背景颜色。

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

我是否已经接近解决方案了?

0
0 Comments

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

这个问题的出现是因为在与十六进制颜色相关的搜索中,经常会遇到这个问题。

从int获取颜色

十六进制颜色的格式为RRGGBBAARRGGBB(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);

注意,字符串必须以#开头。支持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">/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

注意事项

0
0 Comments

问题出现的原因:

问题的原因是在使用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"));

0
0 Comments

如何从十六进制颜色字符串获取颜色的问题?

在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);

通过以上方法,我们可以从十六进制颜色字符串中获取颜色,并进行相应的操作。

0