2012-02-02 12 views
48

मैं array.xml के अंदर रंग मान कैसे सहेज सकता हूं और इसे अपने कोड पर रंग [] सरणी के रूप में पुनर्प्राप्त कर सकता हूं?मैं array.xml में रंग कैसे सहेज सकता हूं और इसे वापस रंग में प्राप्त कर सकता हूं [] सरणी

पहले से धन्यवाद! गतिविधि कक्षा में

उत्तर

20

colors.xml

<resources> 
    <string-array name="colors">   
     <item>#ff0000</item> 
     <item>#00ff00</item> 
     <item>#0000ff</item> 
    </string-array> 
</resources> 

कोड।

String[] allColors = context.getResources().getStringArray(R.array.colors); 

Color.parseColor(allColors[0]) // red 
Color.parseColor(allColors[1]) // green 
Color.parseColor(allColors[2]) // blue 
+1

धन्यवाद। मैंने यह वास्तव में एक अच्छा और साफ समाधान पाया। खासकर क्योंकि अगर आपको सूची में हर रंग के लिए विशिष्ट नाम की आवश्यकता नहीं है तो यह थोड़ा अनावश्यकता दिखाता है। – Mathias

+0

अन्य समाधान मेरे लिए काम नहीं किया। धन्यवाद! –

42

इस array.xml में है:

<resources> 
    <array name="colors"> 
     <item>#ffffff</item> 
     <item>#000000</item> 
    </array> 
</resources> 

यह आपको रंग मान कि सरणी के लिए दे देंगे:

TypedArray ta = context.getResources().obtainTypedArray(R.array.colors); 
int[] colors = new int[ta.length()]; 
for (int i = 0; i < ta.length(); i++) { 
    colors[i] = ta.getColor(i, 0); 
} 
ta.recycle(); 

यह सिर्फ डॉक्स में TypedArray उदाहरण पर फैलता : http://developer.android.com/guide/topics/resources/more-resources.html#TypedArray

उम्मीद है कि यह मदद करता है!

+0

आप सरणी में आइटम के रूप में रंग संसाधनों का भी संदर्भ दे सकते हैं, उदा। '<सरणी नाम =" रंग "> @ रंग/myred @ रंग/myblue ' –

+2

वास्तव में इस के लिए देखा।आईएमएचओ, यह शीर्ष और स्वीकृत उत्तर होना चाहिए ... –

+0

धन्यवाद। यह वही है जो मैं ढूंढ रहा हूं। –

125

अपने रंग संसाधनों को परिभाषित करें, फिर उन्हें एक्सेस के लिए सरणी में जोड़ें।

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="bright_pink">#FF007F</color> 
    <color name="red">#FF0000</color> 
    <color name="orange">#FF7F00</color> 
    <color name="yellow">#FFFF00</color> 
    <color name="chartreuse">#7FFF00</color> 
    <color name="green">#00FF00</color> 
    <color name="spring_green">#00FF7F</color> 
    <color name="cyan">#00FFFF</color> 
    <color name="azure">#007FFF</color> 
    <color name="blue">#0000FF</color> 
    <color name="violet">#7F00FF</color> 
    <color name="magenta">#FF00FF</color> 

    <array name="rainbow"> 
     <item>@color/bright_pink</item> 
     <item>@color/red</item> 
     <item>@color/orange</item> 
     <item>@color/yellow</item> 
     <item>@color/chartreuse</item> 
     <item>@color/green</item> 
     <item>@color/spring_green</item> 
     <item>@color/cyan</item> 
     <item>@color/azure</item> 
     <item>@color/blue</item> 
     <item>@color/violet</item> 
     <item>@color/magenta</item> 
    </array> 
</resources> 

फिर उन्हें इस तरह का उपयोग:

int[] rainbow = context.getResources().getIntArray(R.array.rainbow); 

for (int i = 0; i < tileColumns; i++) { 
    paint.setColor(rainbow[i]); 
    // Do something with the paint. 
} 
+3

अच्छा और साफ समाधान। महान काम करता है;) – David

6

मैं एक टिप्पणी पोस्ट नहीं कर सकते, तो मैं एक नया प्रतिक्रिया के रूप में इस में डाल दिया जाना चाहिए। मैं पूरी तरह से स्काई केल्सी w.r.t. के साथ सहमत हूँ। रंग संसाधन प्रकार का उपयोग करने की डिजाइन पसंद। हालांकि, मुझे लगता है कि उन तक पहुंचने के लिए सुझाव विधि काम नहीं कर पाई। इस तरह मैंने रंगों की सूची के माध्यम से आसानी से लूप करने के लिए एक एक्सएमएल सरणी के उपयोग को लागू किया और रंगों को विभिन्न (कस्टम चित्रित) दृश्यों पर लागू किया।

arrays.xml में सबसे पहले सरणी:

<array name="ingr_color_arr"> 
     <item>@color/ingr_red1</item> 
     <item>@color/ingr_orange1</item> 
     <item>@color/ingr_yellow1</item> 
     <item>@color/ingr_green1</item> 
     <item>@color/ingr_blue1</item> 
     <item>@color/ingr_violet1</item> 
     <item>@color/ingr_red2</item> 
     <item>@color/ingr_orange2</item> 
     <item>@color/ingr_yellow2</item> 
     <item>@color/ingr_green2</item> 
     <item>@color/ingr_blue2</item> 
     <item>@color/ingr_violet2</item> 
    </array> 
फिर color.xml में

:

<color name="ingr_red1">#FFCC0000</color> 
<color name="ingr_orange1">#FFED5F21</color> 
<color name="ingr_yellow1">#FFFAE300</color> 
<color name="ingr_green1">#FF5B9C0A</color> 
<color name="ingr_blue1">#FF0A0D9C</color> 
<color name="ingr_violet1">#FF990A9C</color> 
<color name="ingr_red2">#FFFFCCCC</color> 
<color name="ingr_orange2">#FFFFEACC</color> 
<color name="ingr_yellow2">#FFFFFECC</color> 
<color name="ingr_green2">#FFC7F5C4</color> 
<color name="ingr_blue2">#FFC4DAF4</color> 
<color name="ingr_violet2">#FFE1C4F4</color> 

तो यह उपयोग करने के लिए:

TypedArray ta = res.obtainTypedArray(R.array.ingr_color_arr); 
int colorToUse = ta.getResourceId(intGroupNum.intValue() - 1, R.color.recipe_detail_border); 
paint.setColor(colorToUse); 

कुंजी यहाँ उपयोग करने के लिए है getResourceId क्योंकि setColor (int) रंग के लिए संसाधन आईडी की अपेक्षा करने जा रहा है। जब मुझे getIntArray() या getColor() के साथ मान प्राप्त करने का प्रयास किया गया तो मुझे "संसाधन नहीं मिला" त्रुटियां मिल रही थीं।

सबसे लोकप्रिय उत्तर काम कर सकता है ... मैंने कोशिश नहीं की क्योंकि मैंने 'रंगों की सरणी' डिजाइन पसंद को बेहतर पसंद किया।

+0

मुझे "" संसाधन नहीं मिला "त्रुटि भी मिली। आपका समाधान मेरे लिए काम करता है .. धन्यवाद – W0rmH0le

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

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