Color详解
Android界面开发经常需要设置各种各样的颜色,给布局设置纯色的背景Drawable、设置TextView的文字颜色、自定义View中需要用到各种各样的颜色来丰富界面视觉效果。开发需要对设计中用到的各种Color有所了解,有助于在开发中快速“取色”完成UI开发。
1、Color
Android界面开发离不开颜色,Android中的颜色主要定义在../res/values/colors.xml资源文件中(不仅仅是这里),定义格式如下:
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
</resources>由16进制表示,颜色范围为0~FFFFFF。透明度(Alpha);红色(Red);绿色(Green);蓝色(Blue)
#AARRGGBB
1.1、ColorInt(常用)
int 类型颜色值
1.2、ColorLong
long 类型颜色值
2、Android获取Color的方法
开发中需要给控件设置颜色Color,如何获取具体的颜色值呢?Android开发中有一些方法获取定义的颜色值。
2.1、通过Context
通过Context提供的getColor(@ColorRes int id)方法可以获取../res/values/colors.xml中定义的颜色值。
/**
* Returns a color associated with a particular resource ID and styled for the current theme.
*/
public final int getColor(@ColorRes int id) {
return getResources().getColor(id, getTheme());
}因为Activity、Service等都是继承自Context,所以在Activity中可以直接获取颜色资源值。
int color = getColor(R.color.colorAccent);2.2、通过Resources
前面通过Context获取Color,其实内部也是调用Resources提供的getColor(int id,Theme theme)方法获取res下的资源
/**
* 返回与特定资源ID关联的主题颜色整数。
* 如果资源包含复杂的{@link ColorStateList},则返回集合中的默认颜色。
*/
@ColorInt
public int getColor(@ColorRes int id, @Nullable Theme theme) throws NotFoundException {
final TypedValue value = obtainTempTypedValue();
try {
final ResourcesImpl impl = mResourcesImpl;
impl.getValue(id, value, true);
if (value.type >= TypedValue.TYPE_FIRST_INT
&& value.type <= TypedValue.TYPE_LAST_INT) {
return value.data;
} else if (value.type != TypedValue.TYPE_STRING) {
throw new NotFoundException("Resource ID #0x" + Integer.toHexString(id)
+ " type #0x" + Integer.toHexString(value.type) + " is not valid");
}
final ColorStateList csl = impl.loadColorStateList(this, value, id, theme);
return csl.getDefaultColor();
} finally {
releaseTempTypedValue(value);
}
}Resources类中的getColor(...)方法有两个重载,其中一个参数的getColor(int id)方法已经被废弃,使用两个参数的getColor(int id,Theme theme)方法。
2.3、Color类
Android提供了Color类,方便我们构造Color颜色
①valueOf(@ColorInt int color):从ARGB int解析出Color颜色实例
Color color = Color.valueOf(0x03DAC5);②parseColor(String colorString):Color类的静态方法,从字符串中解析出int类型的ARGB颜色
int colorInt = Color.parseColor("#12345678");③argb(int alpha,int red,int green,int blue):传入四个范围在0~255的int值,分别代表A、R、G、B。
int colorInt = Color.argb(255, 255, 255, 255);④toArgb():Color转成int类型表示的的ARGB颜色值
int color4 = color1.toArgb();2.4、0xAARRGGBB
Android开发中用到的颜色值一般都是0xAARRGGBB的int类型的值,所以可以直接这样写颜色值并且使用。比如下面给TextView的字体设置颜色,设置的都是Color的AARRGGBB格式int颜色值。
textView.setTextColor(getColor(R.color.colorAccent));
textView.setTextColor(0x03DAC5);切记不是直接传递给资源int值,运行会报错!
//Should pass resolved color instead of resource id here: getResources().getColor(R.color.colorAccent)
textView.setTextColor(R.color.colorAccent);有些情况可以很方便的直接传入R.color中的颜色资源ID,分情况。
3、颜色对照表
网络上已经有现成的颜色对照取色表,复制一份方便查看。
| 鸨色 #f7acbc | 赤白橡 #deab8a | 油色 #817936 | 绀桔梗 #444693 |
| 踯躅色 #ef5b9c | 肌色 #fedcbd | 伽罗色 #7f7522 | 花色 #2b4490 |
| 桜色 #feeeed | 橙色 #f47920 | 青丹 #80752c | 瑠璃色 #2a5caa |
| 蔷薇色 #f05b72 | 灰茶 #905a3d | 莺色 #87843b | 琉璃绀 #224b8f |
| 韩红 #f15b6c | 茶色 #8f4b2e | 利久色 #726930 | 绀色 #003a6c |
| 珊瑚色 #f8aba6 | 桦茶色 #87481f | 媚茶 #454926 | 青蓝 #102b6a |
| 红梅色 #f69c9f | 枯茶 #5f3c23 | 蓝海松茶 #2e3a1f | 杜若色 #426ab3 |
| 桃色 #f58f98 | 焦茶 #6b473c | 青钝 #4d4f36 | 胜色 #46485f |
| 薄柿 #ca8687 | 柑子色 #faa755 | 抹茶色 #b7ba6b | 群青色 #4e72b8 |
| 薄红梅 #f391a9 | 杏色 #fab27b | 黄緑 #b2d235 | 铁绀 #181d4b |
| 曙色 #bd6758 | 蜜柑色 #f58220 | 苔色 #5c7a29 | 蓝铁 #1a2933 |
| 红色 #d71345 | 褐色 #843900 | 若草色 #bed742 | 青褐 #121a2a |
| 赤丹 #d64f44 | 路考茶 #905d1d | 若緑 #7fb80e | 褐返 #0c212b |
| 红赤 #d93a49 | 饴色 #8a5d19 | 萌黄 #a3cf62 | 藤纳戸 #6a6da9 |
| 臙脂色 #b3424a | 丁子色 #8c531b | 苗色 #769149 | 桔梗色 #585eaa |
| 真赭 #c76968 | 丁子茶 #826858 | 草色 #6d8346 | 绀蓝 #494e8f |
| 今様色 #bb505d | 黄栌 #64492b | 柳色 #78a355 | 藤色 #afb4db |
| 梅染 #987165 | 土器色 #ae6642 | 若草色 #abc88b | 藤紫 #9b95c9 |
| 退红色 #ac6767 | 黄枯茶 #56452d | 松叶色 #74905d | 青紫 #6950a1 |
| 苏芳 #973c3f | 狐色 #96582a | 白緑 #cde6c7 | 菫色 #6f60aa |
| 茜色 #b22c46 | 黄橡 #705628 | 薄緑 #1d953f | 鸠羽色 #867892 |
| 红 #a7324a | 银煤竹 #4a3113 | 千草色 #77ac98 | 薄色 #918597 |
| 银朱 #aa363d | 涅色 #412f1f | 青緑 #007d65 | 薄鼠 #6f6d85 |
| 赤 #ed1941 | 胡桃色 #845538 | 浅緑 #84bf96 | 鸠羽鼠 #594c6d |
| 朱色 #f26522 | 香色 #8e7437 | 緑 #45b97c | 菖蒲色 #694d9f |
| 洗朱 #d2553d | 国防色 #69541b | 草色 #225a1f | 江戸紫 #6f599c |
| 红桦色 #b4534b | 练色 #d5c59f | 木贼色 #367459 | 紫 #8552a1 |
| 红绯 #ef4136 | 肉色 #cd9a5b | 常盘色 #007947 | 灭紫 #543044 |
| 桦色 #c63c26 | 人色 #cd9a5b | 緑青色 #40835e | 葡萄鼠 #63434f |
| 铅丹色 #f3715c | 土色 #b36d41 | 千歳緑 #2b6447 | 古代紫 #7d5886 |
| 赭 #a7573b | 小麦色 #df9464 | 深緑 #005831 | 暗红 #401c44 |
| 绯色 #aa2116 | 琥珀色 #b76f40 | 萌葱色 #006c54 | 葡萄 #472d56 |
| 丹 #b64533 | 木兰色 #ad8b3d | 青白橡 #375830 | 茄子绀 #45224a |
| 土 #b54334 | 栀子色 #dea32c | 革色 #274d3d | 紫绀 #411445 |
| 焦香 #853f04 | 朽叶 #d1923f | 麹尘 #375830 | 浓色 #4b2f3d |
| 真红 #840228 | 萱草色 #c88400 | 仙斎茶 #27342b | 二蓝 #402e4c |
| 绯 #7a1723 | 黄金 #c37e00 | 若竹色 #65c294 | 菖蒲色 #c77eb5 |
| 红海老茶 #a03939 | 金色 #c37e00 | 青磁色 #73b9a2 | 牡丹色 #ea66a6 |
| 浅苏芳 #8a2e3b | 金茶 #e0861a | 青竹色 #72baa7 | 赤紫 #f173ac |
| 鸢色 #8e453f | 卵色 #ffce7b | 铁色 #005344 | 白 #fffffb |
| 小豆色 #8f4b4a | 山吹色 #fcaf17 | 锖鼠 #122e29 | 胡粉色 #fffef9 |
| 弁柄色 #892f1b | 黄土色 #ba8448 | 铁御纳戸 #293047 | 生成色 #f6f5ec |
| 栗梅 #6b2c25 | 朽叶色 #896a45 | 青緑 #00ae9d | 灰白 #d9d6c3 |
| 海老茶 #733a31 | 空五倍子色 #76624c | 锖浅葱 #508a88 | 石竹色 #d1c7b7 |
| 深绯 #54211d | 莺茶 #6d5826 | 水浅葱 #70a19f | 象牙色 #f2eada |
| 赤铜色 #78331e | 向日葵色 #ffc20e | 新桥色 #50b7c1 | 乳白色 #d3d7d4 |
| 赤褐色 #53261f | 郁金色 #fdb933 | 浅葱色 #00a6ac | 薄钝 #999d9c |
| 金赤 #f15a22 | 砂色 #d3c6a6 | 白群 #78cdd1 | 银鼠 #a1a3a6 |
| 赤茶 #b4533c | 芥子色 #c7a252 | 御纳戸色 #008792 | 茶鼠 #9d9087 |
| 赤锖色 #84331f | 淡黄 #dec674 | 瓮覗 #94d6da | 鼠色 #8a8c8e |
| 黄丹 #f47a55 | 亜麻色 #b69968 | 水色 #afdfe4 | 薄墨色 #74787c |
| 赤橙 #f15a22 | 枯色 #c1a173 | 蓝鼠 #5e7c85 | 利休鼠 #7c8577 |
| 柿色 #f3704b | 鸟子色 #dbce8f | 秘色 #76becc | 铅色 #72777b |
| 肉桂色 #da765b | 黄色 #ffd400 | 空色 #90d7ec | 灰色 #77787b |
| 桦色 #c85d44 | 蒲公英色 #ffd400 | 青 #009ad6 | 钝色 #4f5555 |
| 炼瓦色 #ae5039 | 中黄 #ffe600 | 蓝色 #145b7d | 煤竹色 #6c4c49 |
| 锖色 #6a3427 | 刈安色 #f0dc70 | 浓蓝 #11264f | 黒茶 #563624 |
| 桧皮色 #8f4b38 | 黄檗色 #fcf16e | 勿忘草色 #7bbfea | 黒橡 #3e4145 |
| 栗色 #8e3e1f | 緑黄色 #decb00 | 露草色 #33a3dc | 浓鼠 #3c3645 |
| 黄赤 #f36c21 | 鶸色 #cbc547 | 缥色 #228fbd | 墨 #464547 |
| 代赭 #b4532a | 海松色 #6e6b41 | 浅缥 #2468a2 | 黒 #130c0e |
| 骆驼色 #b7704f | 鶸茶 #596032 | 薄缥 #2570a1 | 黒铁 #281f1d |
| 黄茶 #de773f | 山鸠色 #525f42 | 薄花色 #2585a6 | 蝋色 #2f271d |
| 洗柿 #c99979 | 生壁色 #5f5d46 | 绀青 #1b315e | 紫黒 #1d1626 |
最后,一个心得。项目中所有的颜色最好强制规范:统一定义在colors.xml资源文件中,不然到处都定义了乱七八糟的颜色,改一个可能莫名其妙其它界面的UI的颜色也被修改了,很头疼。而且重复的颜色太多了,降低重复颜色定义。另一方面,有些颜色虽然相同,但是对应的一片功能不同,也不要强行用一个来值来表示。
参考资料:

