2010-11-19 15 views
8

मैं एक ऐप बना रहा हूं और मैं उपयोगकर्ता इनपुट (edittext) और हेक्स मानों के माध्यम से विभिन्न रंग सेट करने में सक्षम होना चाहता हूं उदा। #eeeeee और इतने पर। समस्या यह है कि मुझे यह समझने में प्रतीत नहीं होता कि उन्हें कैसे परिवर्तित किया जाए।जावा/एंड्रॉइड स्ट्रिंग टू कलर रूपांतरण

यदि मैं इस तरह कोड में कुछ करता हूं तो यह ठीक काम करता है: titlebar.setBackgroundColor (0xFF545455);

लेकिन अगर मैं edittext के माध्यम से एक मूल्य कहते हैं कि प्राप्त करें "545,455" मुझे नहीं यह काम

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

किसी को भी यह कैसे पूरा करने के लिए पर कोई विचार है मिल सकता है?

+0

संभावित डुप्लिकेट [रनटाइम में एंड्रॉइड रंग स्ट्रिंग को int में परिवर्तित करना] (http://stackoverflow.com/questions/3849607/converting -android-color-string-in-runtime-in-int) –

उत्तर

19

http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#parseInt(java.lang.String, पूर्णांक)

उदाहरण के लिए:

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

यह 5526613 का मान उत्पन्न करता है और सही रंग पर सही ढंग से सेट नहीं होता है। – Paul

+0

पॉल: इसे संपादित किया गया – thejh

+0

धन्यवाद, यह काम किया! – Paul

50

titlebar.setBackgroundColor(Color.parseColor("#545455")); के बारे में क्या

+0

+1 नहीं अधिक :) – Samuel

+0

इस दे सकता है सही जावा रास्ता है! –

0
StringBuffer hexString = new StringBuffer(); 
hexString.append(Integer.toHexString(0xFF); 
System.out.print(hexString.toString()); 
0

यहाँ किसी भी स्ट्रिंग से रंग प्राप्त करने के लिए अपना कार्य है। उदाहरण: "हैलो वर्ल्ड!" आप आर जी बी के कुछ हरे रंग वापस आ जाएगी: 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); 
} 

नोट: समारोह एक ही नंबर (रंग) हर बार करता है, तो अपने स्ट्रिंग विशेष वर्ण, रिक्त स्थान या संख्याएं शामिल वापस नहीं करता है। वहां कुछ नमक हैं - मैंने उन पात्रों के लिए यादृच्छिक संख्याओं को गिनती की है, बस मजेदार के लिए ...

संबंधित मुद्दे