Java/Android 字符串到颜色的转换

Posted

技术标签:

【中文标题】Java/Android 字符串到颜色的转换【英文标题】:Java/Android String to Color conversion 【发布时间】:2011-05-12 21:03:25 【问题描述】:

我正在制作一个应用程序,我希望能够通过用户输入(edittext)和十六进制值设置各种颜色,例如#eeeeee 等等。问题是我似乎无法弄清楚如何转换它们。

如果我在这样的代码中做某事,它工作正常: 标题栏.setBackgroundColor(0xFF545455);

但是,如果我通过 edittext 检索一个值说“545455”,我无法让它工作

          String tbColor = tb_color.getText().toString();             
          String value = "0xFF" + tbColor;  
          int setColor = Integer.valueOf(value);
          titlebar.setBackgroundColor(setColor);

有人对如何实现这一点有任何想法吗?

【问题讨论】:

Converting android color string in runtime into int的可能重复 【参考方案1】:

这是我从任何字符串中获取颜色的函数。 例如:“你好,世界!”会给你一些 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);

注意: 如果您的字符串包含特殊字符、空格或数字,该函数不会每次返回相同的数字(颜色)。那里有一些盐 - 我为这些角色分配了随机数,只是为了好玩......

【讨论】:

【参考方案2】:
StringBuffer hexString = new StringBuffer();
hexString.append(Integer.toHexString(0xFF);
System.out.print(hexString.toString());

【讨论】:

【参考方案3】:

titlebar.setBackgroundColor(Color.parseColor("#545455"));

【讨论】:

【参考方案4】:

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String, int)

例如:

titlebar.setBackgroundColor(Integer.parseInt("545455", 16)+0xFF000000);

【讨论】:

这会产生一个 5526613 的值并且没有正确设置为正确的颜色。 完美运行!但是请你帮我理解为什么添加:“+0xFF000000”让它工作?? Luis Alberto,因为 545455 替换了 0xFF 之后的 000000 就像:850 + 100000 = 100850(但以十六进制格式) BTW 0xFF 定义了 alpha(透明度)

以上是关于Java/Android 字符串到颜色的转换的主要内容,如果未能解决你的问题,请参考以下文章

Javascript日期增量转换到字符串和从字符串转换

Java/Android - 将 GMT 时间字符串转换为本地时间

WPF 颜色转换

在 Java (Android 1.6 API) 中将 String 转换为 CharSequence 或 char[]

less1

探秘JavaScript中的六个字符