android - 像 "green"这样的颜色是在 Color.parseColor() 中硬编码的还是使用 R.color 中的值?

标签 android android-color

根据official documentation Color.parseColor 不仅接受十六进制值,还接受颜色名称 redbluegreenblack、< em>白色、灰色青色洋红色黄色浅灰色 em>、深灰色灰色浅灰色深灰色浅绿色>紫红色青柠色栗色海军蓝橄榄色紫色>、银色青色

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

最佳答案

让我们take a look at sourceparseColor() android.graphics.Color内:

@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 值。但我们对此不感兴趣,所以跳到else声明我们要查看 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);

}

因此,如果我们获得匹配,则返回该颜色 ARGB 值(一些命名的 ARGB 值在类的顶部定义为 @ColorInt int 常量)。如果没有,则 IllegalArgumentException被抛出。

所以回答你的问题,是的,这些值是硬编码的。如果您想使用自己的值,请在应用程序的 colors.xml 中定义它们文件。

关于android - 像 "green"这样的颜色是在 Color.parseColor() 中硬编码的还是使用 R.color 中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56645389/

相关文章:

java - parse.com 查询到 sqlite 查询

java - 如何将ZXING导入android studio?

java - 如何在 Android 中创建动态颜色指示器?

android - 更改掩码密码选择器的颜色

Android 图像在不同手机中的颜色变化

java - 运行时错误 : java. lang.NoClassDefFoundError : com. google.android.gms.R$styleable

android - 如何修复谷歌地图 "Authentication failed on the server"?

java - Appium - 弹出警报消息没有被关闭

android - 无法解析符号@android :color/X anymore

java - 如何随机获得 Material Design 颜色?