Android को स्ट्रिंग मान के रूप में रंग मिलता है


104

अगर मैंने संसाधनों में रंग को परिभाषित किया है

<resources>
    <color name="someColor">#123456</color>
</resources>

इसकी आईडी द्वारा रंग सेट करना संभव है, जैसे

view.setTextColor(R.color.someColor);

क्या color.xml से रंग स्ट्रिंग मान प्राप्त करना संभव है?

कुछ इस तरह

colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"

यदि हाँ, तो क्या कोई उदाहरण दे सकता है?

धन्यवाद

जवाबों:


151

यह आपका जवाब है

colorStr=getResources().getString(R.color.someColor);

तुम्हे मिल जाएगा

 colorStr = "#123456"

5
सबसे पहले, धन्यवाद। मैं रंगों के लिए getString का उपयोग करने के लिए नहीं सोचा था। यह काम करता है, लेकिन colorStr = "# 123456" के बजाय "# ff123456" प्राप्त कर रहा हूं, और यह अच्छा नहीं है :(
Tima

7
अल्फा कार्यों को हटाने के लिए लौटे रंग स्ट्रिंग का एक सरल विकल्प। । getResources () GetString (R.color.my_colour) .substring (3);
स्कॉटीटैब

82
यह कोई और अधिक काम नहीं कर रहा है, त्रुटि 'टाइपिंग स्ट्रिंग के अपेक्षित संसाधन'
क्लाइव जेफरीज

21
@CliveJefferies आप //noinspection ResourceTypeअपने कथन के ठीक ऊपर जोड़ सकते हैं ।
लॉर्डमेगमैक्स

15
getResources().getString(0+R.color.someColor);काम करता है
18446744073709551615

139

बस आसान कोपिपास्ता के लिए:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color));

या यदि आप इसे पारदर्शिता के बिना चाहते हैं:

"#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.some_color) & 0x00ffffff);

8
यह बहुत अच्छा काम हुआ, हालाँकि '#' + Integer.toHexString(getResources().getColor(R.color.someColor);बाद में इसका उपयोग करके मुझे इसे संशोधित करने की आवश्यकता हुई क्योंकि बाद में मैं इसका उपयोग कर रहा थाColor.parseColor
gattsbr

4
geColor () एपी की जरूरत है> २३
होंगहे.व्यू

1
आप हटाए गए getColor () कोई समस्या नहीं का उपयोग कर सकते हैं। बस "getColor (...)" को हटा दें और इसे फिर से टाइप करें, एंड्रॉइड डिप्रेक्टेड getColor कॉल के साथ विधि कॉल को पूरा करने के लिए intellisense का उपयोग करें और आप अच्छे हैं।
वेस विन्न

Integer.toHexString (ContextCompat.getColor (संदर्भ, R.color.black) और 0x00ffffff);
AITAALI_ABDERRAHMANE

8
यह काम नहीं करेगा अगर वहाँ हेक्स रंग के पहले 0 है।
आशीष

26

ऊपर दिए गए उत्तर अपडेट नहीं हैं।

कृपया इसे आजमाएं

String colorHex = "#" + Integer.toHexString(ContextCompat.getColor(getActivity(), R.color.dark_sky_blue) & 0x00ffffff);

23

Integer.toHexString()यदि आप अपने हेक्स स्ट्रिंग में अग्रणी शून्य होगा, तो ब्रेक का उपयोग करके यहां के सभी समाधान । जैसे रंग #0affffमें परिणाम होगा #affff। इसके बजाय इसका उपयोग करें:

String.format("#%06x", ContextCompat.getColor(this, R.color.your_color) & 0xffffff)

या अल्फा के साथ:

String.format("#%08x", ContextCompat.getColor(this, R.color.your_color) & 0xffffffff)

9

कारण की getResources().getColorआवश्यकता एपीआई> 23. तो यह बेहतर है: बस आसान कॉपी और पेस्ट के लिए:

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );

या यदि आप इसे पारदर्शिता के बिना चाहते हैं: `

Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );


ContextCompat.getColor3 तर्क नहीं लेते
नशीं

@ नहीं यह 2 तर्क है, 3 नहीं!
बेहरोज़।

4

21 से ऊपर एपीआई के लिए आप उपयोग कर सकते हैं

getString(R.color.color_name);

यह स्ट्रिंग प्रारूप में रंग लौटाएगा। पूर्णांक स्वरूप में रंग में परिवर्तित करने के लिए (कभी-कभी केवल पूर्णांक स्वीकार किए जाते हैं) तब:

Color.parseColor(getString(R.color.color_name));

उपरोक्त अभिव्यक्ति color.xml फ़ाइल में परिभाषित रंग के बराबर पूर्णांक देता है


2

यदि त्रुटि होती है तो @SuppressLint ("रिसोर्स टाइप") जोड़ें। बलो की तरह।

private String formatUsernameAction(UserInfo userInfo, String action) {
        String username = userInfo.getUsername();
        @SuppressLint("ResourceType") String usernameColor = getContext().getResources().getString(R.color.background_button);
        return "<font color=\""+usernameColor+"\">" + username
                + "</font> <font color=\"#787f83\">" + action.toLowerCase() + "</font>";
    }

1

मुझे नहीं लगता कि इसके लिए मानक कार्यक्षमता है। आप हालांकि मूल्य को प्रतिफल से getColor()हेक्स में बदल सकते हैं और हेक्स मान को स्ट्रिंग में बदल सकते हैं।

हेक्स 123456 = इंट 1193046;


1

मैंने इसे कैसे किया है:

String color = "#" + Integer.toHexString(ContextCompat.getColor
(getApplicationContext(), R.color.yourColor) & 0x00ffffff);


-4

यदि आप उपयोग नहीं करना चाहते हैं ContextCompatया SuppressLint, बस stringअपने नीचे एक संसाधन जोड़ेंcolor

के बजाय

<color name="text_color">#FFFFFF</color>

उपयोग

<color name="text_color">#FFFFFF</color>
<string name="text_color_string">#FFFFFF</string>

आपके कोड को अधिक दोहराव मिलता है लेकिन यह बहुत साफ है। इसके अलावा, stringबदलने के बाद अपडेट करना भूल जाना colorलगभग असंभव है क्योंकि वे एक-दूसरे के ठीक बगल में हैं।


दोहराव हमेशा एक बुरा विचार है
लुकाज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.