gpt4 book ai didi

android - 从 R.color 中以编程方式检索颜色

转载 作者:行者123 更新时间:2023-11-30 02:35:46 25 4
gpt4 key购买 nike

我有一个包含许多 TextView 的 ListView,一个 TextView 应该包含不同的背景颜色,具体取决于检索到的数据。

因为我不想对颜色进行硬编码,所以我使用 R.color 来设置颜色。这很好用,但我必须手动检查每种颜色,因为我注意到能够像 HashMap 一样获得颜色。所以我的第一次尝试是这样的:

    switch(line) {
case "1":
lineColor = context.getResources().getColor(R.color.line1);
case "2":
lineColor = context.getResources().getColor(R.color.line2);
....
....
}

这似乎离干净的代码还很远,所以我尝试了一种使用字符串数组的不同方法:

<string-array name="line_color_names">
<item>1</item>
<item>2</item>
....
</string-array>

<string-array name="line_color_values">
<item>#e00023</item>
<item>#ef9ec1</item>
....
</string-array>

在我的 AdapterClass 中,我刚刚创建了一个 HashMap 并将这个字符串数组放在一起:

    String[] line_color_names = context.getResources().getStringArray(
R.array.line_color_names);
String[] line_color_values = context.getResources().getStringArray(
R.array.line_color_values);

lineColors = new HashMap<String, String>();
for (int i = 0; i < line_color_names.length; i++) {
lineColors.put(line_color_names[i], line_color_values[i]);
}

所以我的问题是:这是实现此目标的唯一方法还是有另一种方法,最好是直接从 R.color 获取颜色?

提前致谢!

最佳答案

您可以使用资源名称(R.color.foo)获取颜色 ID,并在运行时解析它:

public int getColorIdByResourceName(String name) {
int color;
try {
Class res = R.color.class;
Field field = res.getField( name );
int color = field.getInt(null);
} catch ( Exception e ) {
e.printStackTrace();
}
return color;
}

然后

int colorId  = getColorIdByResourceName("foo21");
int colorVal = getResources().getColor(getColorIdByResourceName("foo21"));

关于android - 从 R.color 中以编程方式检索颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26584922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com