Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颜色是不是像;“绿色”;在Color.parseColor()中硬编码,还是使用R.Color中的值?_Android_Android Color - Fatal编程技术网

Android 颜色是不是像;“绿色”;在Color.parseColor()中硬编码,还是使用R.Color中的值?

Android 颜色是不是像;“绿色”;在Color.parseColor()中硬编码,还是使用R.Color中的值?,android,android-color,Android,Android Color,根据Color.parseColor不仅接受十六进制值,还接受颜色名称红、蓝、绿、黑、白、灰、青色、洋红、黄、浅灰色、暗灰色、灰色、浅灰色、暗灰色、水绿色、品红、青灰色、栗色、海军蓝、橄榄色、紫色、银色和青色 这些值是硬编码的还是我可以自定义生成哪种绿色?让我们在android.graphics.Color中使用parseColor(): @ColorInt public static int parseColor(@Size(min=1) String colorString) { i

根据Color.parseColor不仅接受十六进制值,还接受颜色名称红、蓝、绿、黑、白、灰、青色、洋红、黄、浅灰色、暗灰色、灰色、浅灰色、暗灰色、水绿色、品红、青灰色、栗色、海军蓝、橄榄色、紫色、银色和青色

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

让我们在
android.graphics.Color中使用
parseColor()

@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);

}
静态{
sColorNameMap=newhashmap();
sColorNameMap.put(“黑色”,黑色);
sColorNameMap.put(“暗灰色”,DKGRAY);
sColorNameMap.put(“灰色”,灰色);
sColorNameMap.put(“浅灰色”,LTGRAY);
sColorNameMap.put(“白色”,白色);
sColorNameMap.put(“红色”,红色);
sColorNameMap.put(“绿色”,绿色);
sColorNameMap.put(“蓝色”,蓝色);
sColorNameMap.put(“黄色”,黄色);
sColorNameMap.put(“青色”,青色);
sColorNameMap.put(“洋红”,洋红);
sColorNameMap.put(“aqua”,0xFF00FFFF);
sColorNameMap.put(“紫红色”,0xFFFF00FF);
sColorNameMap.put(“暗灰色”,DKGRAY);
sColorNameMap.put(“灰色”,灰色);
sColorNameMap.put(“浅灰色”,LTGRAY);
sColorNameMap.put(“石灰”,0xFF00FF00);
sColorNameMap.put(“褐红色”,0xFF800000);
sColorNameMap.put(“海军”,0xFF000080);
sColorNameMap.put(“olive”,0xFF808000);
sColorNameMap.put(“紫色”,0xFF800080);
sColorNameMap.put(“银色”,0xFFC0);
sColorNameMap.put(“teal”,0xFF008080);
}
因此,如果我们得到匹配,则返回颜色ARGB值(一些命名的ARGB值在类的顶部定义为
@ColorInt int
常量)。如果不是,则抛出一个
IllegalArgumentException


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

您可以使用十六进制代码在
color.xml
中定义任何颜色并在代码中使用。。这些颜色就像是颜色。红色是硬编码的。。。