รับสีการออกแบบวัสดุ Android แบบสุ่ม

ฉันพบรายการสีการออกแบบวัสดุนี้ และฉันอยากได้สีแบบสุ่มจากสีดังกล่าว ฉันยังใหม่ในการพัฒนา Android และฉันไม่เข้าใจวิธีการทำงานของทรัพยากร Android อย่างถ่องแท้

ฉันรู้ว่าสามารถรับสีที่กำหนดเองได้ภายใน R.color.my_color จาก res/values/colors.xml แต่ฉันต้องการแยกสีที่กำหนดเองของแอปออกจากสีการออกแบบวัสดุ

สิ่งที่ฉันพยายามทำ:

  1. นำเข้าไฟล์ xml จากลิงก์ไปยังโครงการของฉันภายใต้โฟลเดอร์ res (เช่น res/values/android_material_design_colours.xml)
  2. รับสีทั้งหมดจากไฟล์

    int[] allColors = (ส่วนที่หายไป)

  3. รับสีแบบสุ่มโดยใช้คลาส Random

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

เป็นไปได้หรือมีวิธีใดที่ดีกว่านี้? กรุณาช่วย.


person yesterdaysfoe    schedule 13.10.2015    source แหล่งที่มา
comment
ดูที่นี่: stackoverflow.com/questions/5347107 / แทนที่จะใช้สีที่วาดได้ ฉันหวังว่าทุกอย่างจะชัดเจน ความคิดก็เหมือนกัน   -  person krossovochkin    schedule 13.10.2015
comment
นี่เป็นวิธีสุดท้ายใช่ไหม? ฉันหมายถึงว่าฉันกำลังมองหาวิธีง่ายๆ ที่ฉันไม่ต้องแก้ไขไฟล์และไม่ต้องคัดลอกและวางทีละไฟล์   -  person yesterdaysfoe    schedule 13.10.2015


คำตอบ (2)


เนื่องจากฉันกำลังหลีกเลี่ยงการแก้ไขไฟล์ ฉันจึงทำโดยการอ่าน xml สิ่งที่ดีที่ Android มีคลาส android.content.res.XmlResourceParser ที่ทำให้การแยกวิเคราะห์ xml ง่ายขึ้น ฉันลงเอยด้วยวิธีแก้ปัญหานี้:

นำเข้า ไฟล์ xml ไปยังโครงการของฉันภายใต้โฟลเดอร์ 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;
}
person yesterdaysfoe    schedule 14.10.2015

สร้างอาร์เรย์สตริงด้วยสีวัสดุทั้งหมด

<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)]);
person HellCat2405    schedule 13.10.2015