Android colors.xml定义透明度 颜色资源透明度Hex值表

1次阅读

colors.xml中必须使用#aarrggbb格式定义带透明度的颜色,如#80ff0000表示50%不透明的红色;不支持#rgba、rgba()或argb错位写法,主题色等系统属性还要求必须不透明。

Android colors.xml定义透明度 颜色资源透明度Hex值表

colors.xml 里怎么写带透明度的色值

androidcolors.xml 不支持直接写 #RGBA#ARGB 这种四通道简写(比如 #80FF0000 是合法的,但很多人误以为 #80F00 也能用——它不能)。真正能用的只有 8 位十六进制格式:#AARRGGBB,其中前两位 AA 是 alpha 通道,决定透明度。

常见错误是把 CSS 风格的 rgba(255, 0, 0, 0.5) 或 Sketch 里复制的 #FF000080(错位!)直接粘过去,结果编译报错 Color value not valid 或运行时颜色全黑/全透明。

  • #FF 表示不透明,#00 表示完全透明;中间值按 16 进制线性映射:比如 #80 ≈ 50% 透明(实际是 128/255 ≈ 50.2%)
  • 别手写换算,用编辑器自带的十六进制 alpha 查表更稳(下个副标题就列)
  • 如果从设计稿拿到的是 RGB + opacity 数值(如 R=255, G=102, B=0, α=30%),先算 alpha 字节:math.round(0.3 * 255)774D,再拼成 #4DFF6600

常用透明度 Hex 值速查表(#AA 部分)

别每次打开计算器。这些是设计师和开发高频使用的 alpha 值,对应标准透明度百分比(四舍五入到最接近的 16 进制字节):

  • 100% 不透明 → #FF
  • 90% → #E6
  • 80% → #CC
  • 70% → #B3
  • 60% → #99
  • 50% → #80
  • 40% → #66
  • 30% → #4D
  • 20% → #33
  • 10% → #1A
  • 0% 完全透明 → #00

举例:深灰文字半透效果,原色 #333333,加 70% 不透明 → #B3333333;注意不是 #333333B3(那是错的 ARGB 顺序)。

为什么 #AARRGGBB 在某些旧设备上显示异常

Android 4.1(API 16)之前,系统对 alpha 通道解析有兼容性问题,尤其在 TextViewtextColorDrawable 着色时,#80FF0000 可能被当纯黑或忽略 alpha。这不是你写错了,是底层 Skia 渲染引擎的老 bug

  • 最低兼容到 API 16 的项目,建议避免在 colorAccentcolorPrimary 这类主题色里用带透明度的值(主题色必须是不透明的)
  • 真要动态控透明度,优先用 Color.argb() 在代码里生成,而不是塞进 colors.xml
  • 矢量图(.xml drawable)里引用 @color/my_transparent_red 是安全的,但确保该 color 定义在 values/colors.xml 而非 values-v23/

别在 colors.xml 里用 alpha 属性单独定义透明度

有人想“复用颜色+动态调透明”,于是写:

<color name="red">#FF0000</color><br><color name="red_50">@color/red</color>

再幻想系统自动叠加 alpha —— 不行。@color/red 引用只是文本替换,不会做 alpha 合成。

  • Android 不支持类似 CSS 的 color: hsla(...) 或变量计算
  • 想复用,只能手动写多套:red_100red_80red_50… 每个都是完整 #AARRGGBB
  • 如果项目用了 Jetpack Compose,改用 Color(0xFF, 0x00, 0x00, 0x80) 更灵活,但这是另一套体系,和 colors.xml 无关

最易被忽略的一点:主题中所有以 color 开头的属性(colorBackgroundcolorOnSurface 等)都要求不透明值,填了带 AA 的颜色,有些 Material 组件会直接 fallback 到默认色,且不报错。

text=ZqhQzanResources