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

标签 android colors

我有一个包含许多 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/

相关文章:

java - 如何修复 RecyclerView : No adapter attached; skipping layout?

android - Proguard 警告 "can' t 写入资源 [META-INF/MANIFEST.MF](重复的 zip 条目)”

android - Google Play 更新应用资源

android - 谷歌地方 API : PLACES_API_INVALID_APP

javascript - 使用 Mapbox 对线条使用颜色渐变

php - 使用 php 进行颜色缩放

Android Videoview - 删除两侧的黑色空间

html - 如何使用CSS部分着色边框

javascript - 获取 CSS 背景图片的像素颜色

java - 我可以给我的乌龟上色吗?