Dapatkan Warna Desain Material Android Secara Acak

Saya menemukan ini daftar warna desain material dan saya ingin mendapatkan warna acak darinya. Saya baru dalam pengembangan Android dan tidak sepenuhnya memahami cara kerja sumber daya Android.

Saya tahu bahwa saya bisa mendapatkan warna khusus pada R.color.my_color dari res/values/colors.xml tetapi saya ingin memisahkan warna khusus aplikasi saya dari warna desain material.

Apa yang saya coba lakukan:

  1. Impor file xml dari tautan ke proyek saya di bawah folder res (mis. res/values/android_material_design_colours.xml)
  2. Dapatkan semua warna dari file

    int[] allColors = (bagian yang hilang)

  3. Dapatkan warna acak dengan menggunakan kelas Random

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

Apakah ini mungkin atau ada cara yang lebih baik? Tolong bantu.


person yesterdaysfoe    schedule 13.10.2015    source sumber
comment
Lihat di sini: stackoverflow.com/questions/5347107 / Daripada menggunakan drawable, gunakan warna. Saya harap semuanya akan menjadi jelas. Idenya sama saja   -  person krossovochkin    schedule 13.10.2015
comment
Apakah ini cara terakhir? Maksud saya, saya sedang mencari cara sederhana agar saya tidak perlu mengubah file dan tidak menyalin dan menempel satu per satu.   -  person yesterdaysfoe    schedule 13.10.2015


Jawaban (2)


Karena saya menghindari mengubah file, saya melakukannya dengan membaca xml. Untung Android memiliki kelas android.content.res.XmlResourceParser yang menyederhanakan penguraian xml. Saya berakhir dengan solusi ini:

Mengimpor file xml ke proyek saya di bawah folder res/xml (mis. res/xml/android_material_design_colours.xml )

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

Dan

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

Buat string-array dengan semua warna material.

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

Dapatkan susunan warna dalam aktivitas

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

Parsing nilai string untuk mendapatkan nilai int:

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