Получить цвет Android Material Design случайным образом

Я нахожу этот список цветов материального дизайна и хочу получить из него случайный цвет. Я новичок в разработке 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 / Вместо drawable используйте цвет. надеюсь все будет понятно. Идея точно такая же   -  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