当前位置: 首页 > 知识库问答 >
问题:

像“green”这样的颜色是硬编码在color.parsecolor()中还是使用来自r.color的值?

羊舌兴德
2023-03-14

根据官方文件color.Parsecolor不仅接受十六进制值,还接受红色、蓝色、绿色、黑色、白色、灰色、青色、洋红色、黄色、浅灰色、深灰色、灰色、浅灰色、深灰色、水色、紫红色、石灰、栗色、海军、橄榄色、紫色、银色和青绿色。

这些值是硬编码的还是我可以自定义哪种绿色得到生产?

共有1个答案

林泰平
2023-03-14

让我们看看Android.graphics.colorParsecolor()的源代码:

@ColorInt
public static int parseColor(@Size(min=1) String colorString) {
    if (colorString.charAt(0) == '#') {
        // Use a long to avoid rollovers on #ffXXXXXX
        long color = Long.parseLong(colorString.substring(1), 16);
        if (colorString.length() == 7) {
            // Set the alpha value
            color |= 0x00000000ff000000;
        } else if (colorString.length() != 9) {
            throw new IllegalArgumentException("Unknown color");
        }
        return (int)color;
    } else {
        Integer color = sColorNameMap.get(colorString.toLowerCase(Locale.ROOT));
        if (color != null) {
            return color;
        }
    }
    throw new IllegalArgumentException("Unknown color");
}

因此,首先检查字符串的第一个字符是否为#,这象征着我们是否使用RGB或ARGB值。但是我们对此不感兴趣,所以跳到els语句,在这里我们查看colorString参数是否与scolornamemap中的键匹配:

static {
    sColorNameMap = new HashMap<>();
    sColorNameMap.put("black", BLACK);
    sColorNameMap.put("darkgray", DKGRAY);
    sColorNameMap.put("gray", GRAY);
    sColorNameMap.put("lightgray", LTGRAY);
    sColorNameMap.put("white", WHITE);
    sColorNameMap.put("red", RED);
    sColorNameMap.put("green", GREEN);
    sColorNameMap.put("blue", BLUE);
    sColorNameMap.put("yellow", YELLOW);
    sColorNameMap.put("cyan", CYAN);
    sColorNameMap.put("magenta", MAGENTA);
    sColorNameMap.put("aqua", 0xFF00FFFF);
    sColorNameMap.put("fuchsia", 0xFFFF00FF);
    sColorNameMap.put("darkgrey", DKGRAY);
    sColorNameMap.put("grey", GRAY);
    sColorNameMap.put("lightgrey", LTGRAY);
    sColorNameMap.put("lime", 0xFF00FF00);
    sColorNameMap.put("maroon", 0xFF800000);
    sColorNameMap.put("navy", 0xFF000080);
    sColorNameMap.put("olive", 0xFF808000);
    sColorNameMap.put("purple", 0xFF800080);
    sColorNameMap.put("silver", 0xFFC0C0C0);
    sColorNameMap.put("teal", 0xFF008080);

}

因此,如果找到匹配项,则返回color ARGB值(一些命名的ARGB值在类的顶部定义@colorint int常量)。如果没有,则抛出IllegalArgumentException

 类似资料:
  • 有没有像Base64这样的编码算法? 谢了!

  • 本文向大家介绍HTML采用的是RGB颜色还是CMYK颜色?为什么?相关面试题,主要包含被问及HTML采用的是RGB颜色还是CMYK颜色?为什么?时的应答技巧和注意事项,需要的朋友参考一下 用在电脑或者手机上显示的大部分都是RGB,用于需要印刷的都用CMYK 并且不同的显示器色域不同会导致色差,不同浏览器也有自己的调色板,后面总结出来过一套web安全色,就是专用在web上大部分情况下都不会有明显色差

  • 问题内容: 应该使用这两种方法中的哪一种来编码URL? 问题答案: 这取决于您实际想要做什么。 encodeURI假定输入是一个完整的URI,其中可能包含一些需要编码的字符。 encodeURIComponent将对具有特殊含义的所有内容进行编码,因此可以将其用于URI的组件,例如

  • 问题内容: 一个简单的好问题:是否有与Eclipse 类似的http://studiostyl.es/? 更新 :由于我使用此链接来了解如何使用该插件,因此我想将其放在此处。 http://www.eclipsecolorthemes.org/?view=plugin 该网站正是我想要的。 问题答案: 看一下http://www.eclipsecolorthemes.org/,也可以在市场上直接买

  • 我正在看宣传单。 在setTimeout中调用

  • 问题内容: 在PHP中,使用可以很容易地传回json对象。 但是,是否有与之等效的XML? 问题答案: JSON可以原生地表达php数组,整数,字符串等。XML没有这样的概念,只有元素,属性和文本。如果要逐字转移对象,请使用JSON。如果要实现复杂的API,请使用XML,例如php DOM接口。