Android中为CardView设置颜色报错:Unknown color异常排查
解决Color.parseColor抛出IllegalArgumentException的问题
这个错误通常是因为你从JSON拿到的十六进制颜色字符串不符合Color.parseColor()要求的格式,咱们一步步排查和解决:
常见原因&对应解决方案
1. 颜色字符串缺少#前缀
Color.parseColor()只认带#开头的十六进制格式(比如#RRGGBB或#AARRGGBB),如果你的JSON返回的是纯十六进制值(比如FF0000而不是#FF0000),就会触发这个错误。
解决代码:
String playerteamcolorstr = playerteamcolorlist.get(i); // 先去除前后空白,再检查是否有#前缀 playerteamcolorstr = playerteamcolorstr.trim(); if (!playerteamcolorstr.startsWith("#")) { playerteamcolorstr = "#" + playerteamcolorstr; } // 再设置背景色 viewHolder.soldedlinearlayout.setCardBackgroundColor(Color.parseColor(playerteamcolorstr));
2. 字符串包含多余空白/特殊字符
有时候JSON返回的字符串可能带前后空格、换行符或者其他不可见字符,导致解析失败。用trim()可以快速去除这些干扰。
3. 颜色值不是合法的十六进制
如果字符串里包含0-9、A-F/a-f之外的字符(比如小写字母之外的符号、无关字符等),parseColor()也会报错。这时候可以先打Log确认实际拿到的字符串:
Log.d("ColorCheck", "Raw color string: '" + playerteamcolorstr + "'");
通过Log可以直观看到字符串里的异常内容,再针对性处理(比如过滤非法字符)。
4. 兜底处理避免崩溃
即使做了前面的检查,还是可能遇到异常格式的颜色值,用try-catch包裹代码可以避免APP崩溃,同时设置一个默认颜色:
try { String colorStr = playerteamcolorlist.get(i).trim(); if (!colorStr.startsWith("#")) { colorStr = "#" + colorStr; } viewHolder.soldedlinearlayout.setCardBackgroundColor(Color.parseColor(colorStr)); } catch (IllegalArgumentException e) { // 出现错误时设置默认灰色 viewHolder.soldedlinearlayout.setCardBackgroundColor(Color.GRAY); Log.e("ColorError", "Invalid color: " + playerteamcolorlist.get(i), e); }
内容的提问来源于stack exchange,提问作者Pooja Pachchigar
相关产品推荐
相关产品推荐

