【问题标题】:Android: java.lang.IllegalArgumentException: Unknown colorAndroid:java.lang.IllegalArgumentException:未知颜色
【发布时间】:2012-01-03 17:47:31
【问题描述】:

当我尝试运行以下代码时出现上述错误:

int colourInt = Color.parseColor(colour.getHexValue());

有问题的十六进制值是ee3090b0。有没有办法可以将颜色十六进制值转换为其等效整数并仍保留 alpha 值? 我已尝试遵循此 post 中提出的建议,但它不起作用...

【问题讨论】:

  • 变量“颜色”的类型是什么?
  • 一个名为 Colour 的自定义对象。
  • 原来我忘了在十六进制字符串前面加上#。所以我传递的是“ee3090b0”而不是“#ee3090b0”。

标签: android colors


【解决方案1】:

来自documentation

public static int parseColor(String colorString)

解析颜色字符串,并返回对应的颜色整数。如果 字符串无法解析,抛出 IllegalArgumentException 异常。 支持的格式有:#RRGGBB #AARRGGBB 'red'、'blue'、'green'、 “黑色”、“白色”、“灰色”、“青色”、“洋红色”、“黄色”、“浅灰色”、 '深灰色'

您的方法可能返回一个不以# 开头的字符串。

【讨论】:

  • 如果您的颜色代码字符串中包含空格或换行符,则可能会发生这种情况。所以只需修剪颜色代码字符串。例如:- colorcode.trim();
  • 它需要一个 6 字符长的字符串。我认为它会在 8 个字符(或 6 个以外的任何字符)上引发异常
【解决方案2】:

将其包装在 try catch 块中,并在 catch 块中设置默认颜色以处理异常。确保颜色输入正确,也可以抛出异常来处理失败。

例如,我正在解析 Firebase 远程配置中的颜色,如果获取该颜色时抛出 IllegalArgumentException 我将颜色设置为我的应用中的默认颜色。

          try{
               color = Color.parseColor(RemoteConfigSingleton.getInstance().getEventColor());
            }catch (IllegalArgumentException e){
                color = Color.parseColor("#E53935");
            }

这样做可以避免应用程序的致命崩溃

【讨论】:

    【解决方案3】:

    我想用已接受的答案添加一些内容。当我尝试使用以# 开头的Color.parseColor("#000") 使用黑色时,我遇到了类似的异常。所以事情在你的parseColor 方法中,它只接受六位十六进制颜色代码,如果它小于或大于此它会给出异常。我将其更改为#121212(black) this,它对我有用。

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      • 2020-10-17
      • 2017-08-21
      • 1970-01-01
      相关资源
      最近更新 更多