5

次のような Android プログラマーは、色の名前と 16 進コードを含む XML ファイルをすぐに利用できます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <color name="White">#FFFFFF</color>
 <color name="Ivory">#FFFFF0</color>
 ...
 <color name="DarkBlue">#00008B</color>
 <color name="Navy">#000080</color>
 <color name="Black">#000000</color>
</resources>

次のような構文を使用して、特定の色にアクセスできます。

TextView area1 = (TextView) findViewById(R.id.area);
area1.setBackgroundColor(Color.parseColor(getString(R.color.Navy)));

また

 area1.setBackgroundColor(Color.parseColor("Navy"));

また

Resources res = getResources();  
int rcol = res.getColor(R.color.Navy);  
area1.setBackgroundColor(rcol);  

各色名またはリソース ID を指定せずに、色の xml ファイル全体を色名の String[] と色リソース (R.color.Navy など) の int[] に読み込むにはどうすればよいですか?

4

3 に答える 3

6

リフレクションAPIを使用するのはかなり簡単ですが(私はずっと前にdrawable-idで同様の問題を抱えていました)、多くの経験豊富なユーザーが「dalvikでのリフレクションは本当に遅い」と言ったので注意してください!

//Get all the declared fields (data-members):
Field [] fields = R.color.class.getDeclaredFields();

//Create arrays for color names and values
String [] names = new String[fields.length];
int [] colors = new int [fields.length];

//iterate on the fields array, and get the needed values: 
try {
    for(int i=0; i<fields.length; i++) {
        names [i] = fields[i].getName();
        colors [i] = fields[i].getInt(null);
    }
} catch (Exception ex) { 
    /* handle exception if you want to */ 
}

次に、これらの配列がある場合は、それらからマップを作成して、簡単にアクセスできます。

Map<String, Integer> colors = new HashMap<String, Integer>();

for(int i=0; i<hexColors.length; i++) {
    colors.put(colorNames[i], hexColors[i]);
}
于 2012-08-26T21:43:41.367 に答える
0

color.xmlファイルを/assetディレクトリに移動する必要があると思います。XMLを「手動で」解析する必要があり、R.color。*構文を使用することはできません。(ファイルを複製することを選択した場合を除く)

于 2012-08-26T21:42:24.860 に答える
0

イントロスペクションを使用しR.colorsて、すべてのフィールド名と関連する値を見つけることができます。

R.colors.getClass().getFields()すべての色のリストが表示されます。

各フィールドで使用getName()すると、すべての色の名前のリストが表示されgetInt()、各色の値が表示されます。

于 2012-08-26T21:47:12.007 に答える