2012-02-02 14 views

答えて

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

色リソースを配列内の項目として参照することもできます。色@ '<配列名は= "色"> は/カラー/ myblue ' –

+2

@ をmyredこのため、正確に見えました。IMHO、これはトップ&受け入れられた答えになるはずです... –

+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

私がコメントを投稿することはできませんので、私は新しいレスポンスとしてこれを入れなければなりません。私はSky Kelsey w.r.tと完全に同意します。色資源タイプを使用する設計選択。しかし、私はそれらにアクセスするための提案の方法が動作しなかったことがわかりました。これは、XML配列を使用して色のリストを簡単にループし、様々な(カスタム塗装)ビューに色を適用する方法です。

まずarrays.xmlの配列:color.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 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)は色のリソースIDを期待するためです。 getIntArray()またはgetColor()で値を取得しようとすると、「リソースが見つかりません」というエラーが表示されていました。

最も一般的な答えはうまくいくかもしれません...私は「色の配列」の方が良いと思ったので、私は試していませんでした。

+0

"リソースが見つかりません"というエラーもあります。あなたのソリューションは私のために働いた..ありがとう – W0rmH0le

関連する問題