随机获取AndroidMaterial设计颜色
Get Android Material Design Color Randomly
我找到 this 列表 material 设计颜色,我想从中获取随机颜色。我是 android 开发新手,不完全了解 android 资源的工作原理。
我知道我可以通过 R.color.my_color
从 res/values/colors.xml
获得自定义颜色,但我想将我的应用程序自定义颜色与 material 设计颜色分开。
我想做什么:
- 将 xml 文件从 link 导入我在
res
文件夹下的项目(例如 res/values/android_material_design_colours.xml
)
从文件中获取所有颜色
int[] allColors =
(遗漏部分)
使用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;
}
我找到 this 列表 material 设计颜色,我想从中获取随机颜色。我是 android 开发新手,不完全了解 android 资源的工作原理。
我知道我可以通过 R.color.my_color
从 res/values/colors.xml
获得自定义颜色,但我想将我的应用程序自定义颜色与 material 设计颜色分开。
我想做什么:
- 将 xml 文件从 link 导入我在
res
文件夹下的项目(例如res/values/android_material_design_colours.xml
) 从文件中获取所有颜色
int[] allColors =
(遗漏部分)使用
Random
获取随机颜色 classint 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;
}