एंड्रॉइड में एक रंग पूर्णांक को हेक्स स्ट्रिंग में कैसे बदलें?


195

मेरे पास एक पूर्णांक है जो एक से उत्पन्न हुआ था android.graphics.Color

इंटेगर का मूल्य -16776961 है

मैं इस मान को #RRGGBB प्रारूप के साथ एक हेक्स स्ट्रिंग में कैसे परिवर्तित करूं

सीधे शब्दों में कहें: -16776961 से मैं # 0000FF का उत्पादन करना चाहूंगा

नोट: मैं नहीं चाहता कि आउटपुट में एक अल्फ़ा हो और मैंने भी बिना किसी सफलता के इस उदाहरण को आज़माया है


आप हेक्स रंग को किस पर सेट करने की कोशिश कर रहे हैं? मुझे लगता है कि यहां एक अलग जवाब है
ब्लंडेल

@ ब्लंडेल एम बाहरी अनुप्रयोग को रंग निर्यात करता है। रंग को इस प्रारूप में #RRGGBB
बोसा चूड

तो डेवलपर क्या गलत है ।android.com/ reference/android/content/ res/… ? आपको url को पेस्ट करना होगा या getColor (int) पर स्क्रॉल करना होगा
Blundell

कच्चे पूर्णांक प्राप्त कर रहे हैं। मान संसाधन ओव विजेट से नहीं हैं
बॉसा चुदे

जवाबों:


471

मुखौटा सुनिश्चित करता है कि आप केवल RRGGBB प्राप्त करें, और% 06X आपको शून्य-गद्देदार हेक्स (हमेशा 6 चार्ट लंबा) देता है:

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));

3
यह पूरी तरह से काम किया, धन्यवाद! Integer.toHexString () पर प्रतिस्थापन की कोशिश करने की तुलना में आसान और अधिक सटीक है।
टॉम

7
मैंने अभी महसूस किया है कि Color.parseColor (स्ट्रिंग हेक्स) विधि है जो वास्तव में मैं क्या पूछ रहा हूं।
मार्सेल ब्रो

4
int colorInt = 0xff000000 | Integer.parseInt (hexString, 16);
जोश

5
यदि आपका रंग अल्फा का उपयोग करता है तो इस उत्तर का उपयोग न करें। आप इसे खो देंगे।
साइमन

5
@Simon, इस अल्फा तैयार करने के लिए बस मास्क हटा दें और 6 से 8. बदलें। ध्यान दें कि ओपी ने अल्फा को खारिज करने के लिए कहा था।
TWStStrrob

54

7
यह उत्तर रंग के अल्फा को बरकरार रखता है
बोसा चुड

3
ठीक है, अगर आप अल्फा से छुटकारा पाना चाहते हैं, तो इसके लिए बस थोड़ा सा मास्क बनाएं: Integer.toHexString (मूल्य और 0x00FFFFFF)
ming_codes

3
जावा इंट प्रकार 4 बाइट्स लंबा है। Android.graphics.Color के प्रलेखन के अनुसार, सबसे बाईं बाइट अल्फा चैनल है। 0x00FFFFFF मान के साथ थोड़ा बुद्धिमान और ऑपरेशन का उपयोग करके, आप अनिवार्य रूप से सबसे बाएं बाइट (अल्फा चैनल) को 0 पर साफ़ करते हैं। जब Integer.toHexString के साथ उपयोग किया जाता है, तो यह स्ट्रिंग में 3 बाइट्स के बाकी हिस्सों को छोड़ देगा। सभी गैर-महत्वपूर्ण अंकों को कॉल से हटा दिया जाएगा, इसलिए यदि आप अग्रणी शून्य चाहते हैं, तो आपको इसे स्वयं में प्रस्तुत करना पड़ सकता है।
मिंग_कोड्स

1
के लिए काम नहीं करता है 0x000000FF, या 0xFF0000FFयदि आप अल्फा को हटा दें।
ट्वीस्ट्रीम रौब

26

मेरा मानना ​​है कि मुझे उत्तर मिल गया है, यह कोड पूर्णांक को एक हेक्स स्ट्रिंग में परिवर्तित करता है जो अल्फ़ा को हटाता है।

Integer intColor = -16895234;
String hexColor = "#" + Integer.toHexString(intColor).substring(2);

नोट केवल इस कोड का उपयोग करें यदि आप सुनिश्चित हैं कि अल्फा को हटाने से कुछ भी प्रभावित नहीं होगा।


1
यदि आप 0x00FFFFFFइसके माध्यम से भेजते हैं तो यह दुर्घटनाग्रस्त हो जाएगा Color.parseColor
ट्वीस्ट्रीम रौब

9

मैंने जो किया था यह रहा

 int color=//your color
 Integer.toHexString(color).toUpperCase();//upercase with alpha
 Integer.toHexString(color).toUpperCase().substring(2);// uppercase without alpha

धन्यवाद दोस्तों आप जवाब दिया बात किया था


पहला संस्करण काम नहीं करता है 0x00FFFFFF-> "FFFFFF" (कोई अल्फा नहीं)। दूसरा संस्करण काम नहीं करता 0x00000FFF-> "एफ" (लापता बिट्स)।
ट्वीस्टेरोब सेप

@TWiStErRob ने आपको एक समाधान दिया जो अल्फा चैनल के साथ रंगों के लिए मज़बूती से काम करता है?
साकेत

2
@Saket शीर्ष उत्तर का प्रकार होना चाहिए:String.format("#%08X", intColor)
TWStStrrob

@TWiStErRob आह, बस शीर्ष उत्तर के तहत आपकी टिप्पणी देखी। धन्यवाद!
साकेत

5

हेक्साडेसिमल स्ट्रिंग को ARGB रंग का पूर्णांक मान:

String hex = Integer.toHexString(color); // example for green color FF00FF00

हेक्साडेसिमल स्ट्रिंग ARGB रंग के पूर्णांक मान:

int color = (Integer.parseInt( hex.substring( 0,2 ), 16) << 24) + Integer.parseInt( hex.substring( 2 ), 16);

4

इस विधि के साथ Integer.toHexString , Color.parseColor का उपयोग करते समय आपके पास कुछ रंगों के लिए अज्ञात रंग अपवाद हो सकता है।

और इस विधि String.format ("#% 06X", (0xFFFFFF और intColor) के साथ , आप अल्फा मान खो देंगे।

तो मैं इस विधि का सुझाव देता हूं:

public static String ColorToHex(int color) {
        int alpha = android.graphics.Color.alpha(color);
        int blue = android.graphics.Color.blue(color);
        int green = android.graphics.Color.green(color);
        int red = android.graphics.Color.red(color);

        String alphaHex = To00Hex(alpha);
        String blueHex = To00Hex(blue);
        String greenHex = To00Hex(green);
        String redHex = To00Hex(red);

        // hexBinary value: aabbggrr
        StringBuilder str = new StringBuilder("#");
        str.append(alphaHex);
        str.append(blueHex);
        str.append(greenHex);
        str.append(redHex );

        return str.toString();
    }

    private static String To00Hex(int value) {
        String hex = "00".concat(Integer.toHexString(value));
        return hex.substring(hex.length()-2, hex.length());
    }

0
String int2string = Integer.toHexString(INTEGERColor); //to ARGB
String HtmlColor = "#"+ int2string.substring(int2string.length() - 6, int2string.length()); // a stupid way to append your color

0

यदि आप उपयोग करते Integer.toHexStringहैं तो आप रंगों को बदलने पर छूटे हुए शून्य के साथ समाप्त हो जाएंगे 0xFF000123। यहाँ मेरा कोटलिन आधारित समाधान है जिसके लिए न तो एंड्रॉइड विशिष्ट वर्गों और न ही जावा की आवश्यकता होती है। तो आप इसे मल्टीप्लायर प्रोजेक्ट में भी उपयोग कर सकते हैं:

    fun Int.toRgbString(): String =
        "#${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    fun Int.toArgbString(): String =
        "#${alpha.toStringComponent()}${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    private fun Int.toStringComponent(): String =
        this.toString(16).let { if (it.length == 1) "0${it}" else it }

    inline val Int.alpha: Int
        get() = (this shr 24) and 0xFF

    inline val Int.red: Int
        get() = (this shr 16) and 0xFF

    inline val Int.green: Int
        get() = (this shr 8) and 0xFF

    inline val Int.blue: Int
        get() = this and 0xFF
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.