Listview 的 HashMap 背景颜色值

HashMap background color value for Listview

我要传个人色彩

<color name="colorPrimary">#3F51B5</color>

像这样在 HashMap 中

temp.put(COLOR_COLUMN, String.valueOf(R.color.colorPrimary));

当我读取值时,我会这样做:

if(map.get(COLOR_COLUMN) != null){ int color = Integer.valueOf(map.get(COLOR_COLUMN));}

以及我的 TextView 的 setBackgroundColor(color)

但值类似于 2131492900,颜色是灰色,与我设置的起始颜色非常不同

我该如何解决?

谢谢

Android中的资源(如R.color.colorPrimary)实际上由资源id表示整数形式。这不是实际的 颜色值 。要获取颜色值,您可以使用提供的 int getColor(int id) 方法。另请参阅 Android 开发人员指南中的 Accessing Resources

保存资源 ID 和重复使用颜色的正确方法是:

HashMap<Integer, Integer> temp = new HashMap<>();
temp.put(COLOR_COLUMN, R.color.colorPrimary);
int resourceId = temp.get(COLOR_COLUMN);
view.setBackgroundColor(getColor(resourceId));

作为替代方案,您也可以直接保存颜色的整数表示(而不是其资源 ID):

HashMap<Integer, Integer> temp = new HashMap<>();
temp.put(COLOR_COLUMN, getColor(R.color.colorPrimary));
int color = temp.get(COLOR_COLUMN);
view.setBackgroundColor(color);

如果出于任何原因您需要将资源的 ID 保存为字符串,您当然可以这样做:

HashMap<Integer, String> temp = new HashMap<>();
temp.put(COLOR_COLUMN, String.valueOf(R.color.colorPrimary));
int resourceId = Integer.parseInt(temp.get(COLOR_COLUMN));
view.setBackgroundColor(getColor(resourceId));

我假设你的 COLOR_COLUMN 变量是一个整数。