HashMap的背景颜色值的列表视图
问题描述:
我需要通过个人色彩HashMap的背景颜色值的列表视图
<color name="colorPrimary">#3F51B5</color>
这样
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和颜色是灰色的,从我设置
我该如何解决起始颜色非常不同?
谢谢
答
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
变量是一个整数。
请显示“temp”变量的声明/初始化 –
为什么要将十六进制颜色值解析为整数?您应该获取字符串值,然后将十六进制转换为彩色。或者设置十六进制颜色 –
(1)如果直接setBackgroundColor(R.color.colorPrimary),会发生什么? (2)尝试记录TextView的背景颜色以与(((ColorDrawable)textView.getBackground())。getColor()'进行比较,在变化之前和之后,该值是否有意义? (3)你真的想在intmap中保留一个字符串吗?什么是用例? – orip