随机获取AndroidMaterial设计颜色

Get Android Material Design Color Randomly

我找到 this 列表 material 设计颜色,我想从中获取随机颜色。我是 android 开发新手,不完全了解 android 资源的工作原理。

我知道我可以通过 R.color.my_colorres/values/colors.xml 获得自定义颜色,但我想将我的应用程序自定义颜色与 material 设计颜色分开。

我想做什么:

  1. 将 xml 文件从 link 导入我在 res 文件夹下的项目(例如 res/values/android_material_design_colours.xml
  2. 从文件中获取所有颜色

    int[] allColors =遗漏部分

  3. 使用Random获取随机颜色 class

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

这可能吗,或者有什么更好的方法吗?请帮助。

创建所有 material 颜色的字符串数组。

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

获取 activity

中的颜色数组
String[] allColors = context.getResources().getStringArray(R.array.colors);

解析字符串值以获取 int 值:

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

因为我避免更改文件,所以我通过阅读 xml 来完成。好东西 Android 有 class 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;
}