HashMap的背景颜色值的列表视图

问题描述:

我需要通过个人色彩HashMap的背景颜色值的列表视图

<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(颜色)是一样的东西2131492900和颜色是灰色的,从我设置

我该如何解决起始颜色非常不同?

谢谢

+2

请显示“temp”变量的声明/初始化 –

+0

为什么要将十六进制颜色值解析为整数?您应该获取字符串值,然后将十六进制转换为彩色。或者设置十六进制颜色 –

+1

(1)如果直接setBackgroundColor(R.color.colorPrimary),会发生什么? (2)尝试记录TextView的背景颜色以与(((ColorDrawable)textView.getBackground())。getColor()'进行比较,在变化之前和之后,该值是否有意义? (3)你真的想在intmap中保留一个字符串吗?什么是用例? – orip

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变量是一个整数。