Java/Android 字符串到颜色的转换
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4229372/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java/Android String to Color conversion
提问by Paul
I'm making an app and I'd like to be able to set various colors via user input(edittext) and hex values e.g. #eeeeee and so on. Problem is I cannot seem to figure out how to convert them.
我正在制作一个应用程序,我希望能够通过用户输入(edittext)和十六进制值(例如#eeeeee 等)设置各种颜色。问题是我似乎无法弄清楚如何转换它们。
If I do something in code like this it works fine: titlebar.setBackgroundColor(0xFF545455);
如果我在这样的代码中做一些事情它工作正常:titlebar.setBackgroundColor(0xFF545455);
However if I retrieve a value via the edittext say "545455" I cannot get it work
但是,如果我通过编辑文本检索值说“545455”,我无法让它工作
String tbColor = tb_color.getText().toString();
String value = "0xFF" + tbColor;
int setColor = Integer.valueOf(value);
titlebar.setBackgroundColor(setColor);
Anyone have any ideas on how to accomplish this?
任何人都对如何实现这一目标有任何想法?
回答by Shadi
What about titlebar.setBackgroundColor(Color.parseColor("#545455"));
关于什么 titlebar.setBackgroundColor(Color.parseColor("#545455"));
回答by thejh
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String, int)
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String, int)
For example:
例如:
titlebar.setBackgroundColor(Integer.parseInt("545455", 16)+0xFF000000);
回答by jayesh kavathiya
StringBuffer hexString = new StringBuffer();
hexString.append(Integer.toHexString(0xFF);
System.out.print(hexString.toString());
回答by Dan Alboteanu
here is my function to get colors from ANY string. Eg: "Hello World!" will return you some green color of R?G?B: 84 181 132
这是我从任何字符串中获取颜色的函数。例如:“世界你好!” 会给你一些绿色的 R?G?B: 84 181 132
public static int getColorFromString(String string) {
int[] RGB = {0,0,0};
int l = string.length();
String sub_string_0 = string.substring(0, (int) Math.ceil((double) l / 3)); // responsable for Red
int l_0 = sub_string_0.length();
String sub_string_1 = string.substring(l_0, l_0 + (int) Math.ceil((double) (l - l_0)/2)); // responsable for Green
String sub_string_2 = string.substring(l_0 + sub_string_1.length(), string.length()); // responsable for Blue
String[] sub_string = new String[]{
sub_string_0,
sub_string_1,
sub_string_2
};
for(int i = 0; i < sub_string.length; i++) {
if(sub_string[i].length()==0)
sub_string[i] = " "; // we asign a value (a space)
Log.d("sub_string", i + " " + sub_string[i]);
for (char c : sub_string[i].toCharArray()) {
int c_val = Character.getNumericValue(c) - Character.getNumericValue('a'); // for 'a' -> 0 for 'z' -> 25
if(c_val < 0) // spaces, numbers ...
c_val= new Random().nextInt(25); //add some salt - a random number
Log.d("value ", c + " -> " + c_val);
RGB[i] = RGB[i] + c_val;
}
}
int letters_number = Character.getNumericValue('z') - Character.getNumericValue('a'); // z - a 35 - 10
// normalizing
int R = 255 * RGB[0]/sub_string[0].length()/letters_number;
int G = 255 * RGB[1]/sub_string[1].length()/letters_number;
int B = 255 * RGB[2]/sub_string[2].length()/letters_number;
Log.d("R G B", R +" " + G + " " + B);
return Color.rgb(R, G, B);
}
Note: The function does not return the same number(color) each time if your string includes special characters, spaces or numbers. There is some salt there - I asigned random numbers to those characters, just for fun...
注意:如果您的字符串包含特殊字符、空格或数字,该函数不会每次都返回相同的数字(颜色)。那里有一些盐 - 我为这些字符分配了随机数,只是为了好玩......