我想使用六进制字符串中的颜色(例如
"#FFFF0000"
)来(比如说)更改布局的背景颜色。
Color.HSVToColor
看起来像是胜利者,但它需要 float[]
作为参数。
我已经接近解决方案了吗?
尝试
Color
类方法:
public static int parseColor (String colorString)
来自Android文档:
支持的格式有:#RRGGBB #AARRGGBB 'red', 'blue', 'green', 'black', 'white', 'gray', 'cyan', 'magenta', 'yellow', 'lightgray', '深灰色'
AndroidX:String.toColorInt()
尝试:
myLayout.setBackgroundColor(Color.parseColor("#636161"));
这个问题出现在许多与十六进制颜色相关的搜索中,所以我将在这里添加一个摘要。
十六进制颜色采用
RRGGBB
或 AARRGGBB
(阿尔法、红色、绿色、蓝色)的形式。根据我的经验,直接使用 int
时,您需要使用完整的 AARRGGBB
形式。如果您只有 RRGGBB
形式,则只需在其前面加上 FF
即可使 alpha(透明度)完全不透明。以下是在代码中设置它的方法。在开头使用 0x
表示它是十六进制而不是基数 10。
int myColor = 0xFF3F51B5;
myView.setBackgroundColor(myColor);
正如其他人所指出的,您可以像这样使用
Color.parseColor
int myColor = Color.parseColor("#3F51B5");
myView.setBackgroundColor(myColor);
请注意,字符串必须以
#
开头。支持 RRGGBB
和 AARRGGBB
格式。
实际上,您应该尽可能从 XML 获取颜色。这是推荐的选项,因为它可以更轻松地更改应用程序的颜色。如果您在整个代码中设置了很多十六进制颜色,那么以后尝试更改它们会很痛苦。
Android 材料设计具有已配置十六进制值的调色板。
这些主题颜色在您的整个应用程序中使用,如下所示:
颜色.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);
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
将该字符串转换为可在
int
和 setBackgroundColor
中使用的
setTextColor
颜色
String string = "#FFFF0000";
int color = Integer.parseInt(string.replaceFirst("^#",""), 16);
16 表示它是十六进制,而不是常规的 0-9。结果应该与
相同int color = 0xFFFF0000;
是
int color = Color.parseColor("colorstring");
试试这个:
vi.setBackgroundColor(Color.parseColor("#FFFF0000"));
我用这个,它非常适合我设置我想要的任何颜色。
public static final int MY_COLOR = Color.rgb(255, 102, 153);
为每种红色、绿色和蓝色使用 0-255 设置颜色,然后在您想要使用该颜色的任何地方只需放置 MY_COLOR 而不是 Color.BLUE 或 Color.RED 或 Color 类提供的任何其他静态颜色。
只需在 Google 上搜索颜色图表,您就可以找到包含使用 0-255 的正确 RGB 代码的图表。
试试这个
int colorInt = Color.parseColor("#FF00FFF0");
bg.setBackgroundColor(colorInt);
其中 bg 是要为其设置背景颜色的视图或布局。
在 Xamarin 中 用这个
Control.SetBackgroundColor(global::Android.Graphics.Color.ParseColor("#F5F1F1"));
尝试使用 0xFFF000 并将其传递到 Color.HSVToColor 方法中。
如果您在 XML 中定义了一种颜色并希望使用它来更改背景颜色或其他颜色,那么这个 API 就是您正在寻找的:
((TextView) view).setBackgroundResource(R.drawable.your_color_here);
在我的示例中,我将其用于 TestView
对于缩短的十六进制代码
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);
没有预定义的类可以直接实现从十六进制代码到颜色名称,因此您要做的就是尝试简单的键值对概念,遵循此代码。
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
}
/**
* 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")
希望对某人有帮助
对于 kotlin 扩展功能
fun String.toColor(): Int? {
return if (this.isNotEmpty()) {
Color.parseColor(this)
} else {
null
}