2015-10-13 41 views
0

我找到this材質設計顏色列表,我想從中獲取隨機顏色。我是android開發新手,並沒有完全理解android資源是如何工作的。隨機獲取Android材質設計顏色

我知道我可以通過R.color.my_colorres/values/colors.xml獲得自定義顏色,但我想將我的應用自定義顏色與材質設計顏色分開。

我想要做的事:

  1. 從導入鏈接到我的項目XML文件res文件夾下(前res/values/android_material_design_colours.xml
  2. 獲取所有顏色的文件

    int[] allColors =缺少部分

  3. 使用01獲取隨機顏色類

    int randomColor = allColors[new Random().nextInt(allColors.length)];

這是可能的,或者有什麼更好的辦法?請幫忙。

+1

看:http://stackoverflow.com/questions/5347107/Creating-integer-array-of-resource-id而不是可繪製的使用顏色。我希望一切都會清楚。這個想法是一樣的 – krossovochkin

+1

這是最後一種方式嗎?我的意思是,我正在尋找一種簡單的方法,我不必更改文件,也不需要逐個複製和粘貼。 – yesterdaysfoe

回答

1

因爲我避免更改文件,我通過讀做xml。好東西Android有類android.content.res.XmlResourceParser,簡化了xml解析。我結束了此解決方案:

進口的XML file到我的項目res/xml文件夾下(如res/xml/android_material_design_colours.xml

List<Integer> allColors = getAllMaterialColors(); 
int randomIndex = new Random().nextInt(allColors.size()); 
int randomColor = allColors.get(randomIndex); 

這裏

private List<Integer> getAllMaterialColors() throws IOException, XmlPullParserException { 
    XmlResourceParser xrp = getContext().getResources().getXml(R.xml.materialcolor); 
    List<Integer> allColors = new ArrayList<>(); 
    int nextEvent; 
    while ((nextEvent = xrp.next()) != XmlResourceParser.END_DOCUMENT) { 
     String s = xrp.getName(); 
     if ("color".equals(s)) { 
      String color = xrp.nextText(); 
      allColors.add(Color.parseColor(color)); 
     } 
    } 
    return allColors; 
} 
1

創建包含所有材質顏色的字符串數組。

<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); 

解析字符串值來獲得int值:

int randomColor = Color.parseColor(allColors[new Random().nextInt(allColors.length)]);