ColorPicker库添加自定义颜色时应用崩溃及标题栏浅色设置问题
问题1:自定义十六进制颜色导致应用崩溃
你的崩溃问题是因为部分颜色字符串不符合标准的十六进制颜色格式,ColorPicker库解析这些无效字符串时会抛出异常。看你代码里的问题颜色:
#ab234:只有5位,标准RGB颜色是6位(#RRGGBB),带透明度的是8位(#AARRGGBB)#5123fff:7位,同样不符合长度要求
解决方案
把所有颜色字符串修正为标准格式:
ArrayList<String> colors = new ArrayList<>(); colors.add("#122000"); colors.add("#aabb22"); // 修正原#ab234,补全为6位 colors.add("#cf2387"); colors.add("#003399"); colors.add("#fb3498"); colors.add("#5123ff"); // 修正原#5123fff,截断为6位 colors.add("#12a1bf");
如果需要带透明度的颜色,直接用8位格式,比如#80122000(前两位80表示半透明)。
问题2:为标题栏设置更浅的颜色变体
可以通过调整选中颜色的亮度生成浅色调,这里给两种实用方法:
方法1:用AndroidX ColorUtils工具类
如果项目依赖AndroidX,直接用ColorUtils混合原颜色和白色,比例自己调:
@Override public void setOnFastChooseColorListener(int position, int color) { etNote.setBackgroundColor(color); // 混合30%白色+70%原颜色,生成浅色调,0.3是白色占比,可改 int lightToolbarColor = ColorUtils.blendARGB(color, Color.WHITE, 0.3f); toolbar.setBackgroundColor(lightToolbarColor); }
方法2:手动计算RGB分量
自己解析颜色的RGB值,提高每个分量的亮度(不超过255):
// 自定义方法:提高颜色亮度,factor是亮度提升比例(比如0.2=20%) private int lightenColor(int color, float factor) { int red = Math.min(255, (int) (Color.red(color) * (1 + factor))); int green = Math.min(255, (int) (Color.green(color) * (1 + factor))); int blue = Math.min(255, (int) (Color.blue(color) * (1 + factor))); // 保留原颜色的透明度 return Color.argb(Color.alpha(color), red, green, blue); } // 使用示例 @Override public void setOnFastChooseColorListener(int position, int color) { etNote.setBackgroundColor(color); // 提升20%亮度,生成标题栏的浅颜色 int lightToolbarColor = lightenColor(color, 0.2f); toolbar.setBackgroundColor(lightToolbarColor); }
内容的提问来源于stack exchange,提问作者neverStop
相关产品推荐
相关产品推荐

