颜色透明度转换技术文档(Android/Compose)
1. 核心转换原理
透明度在十六进制中由 00(全透明)到 FF(不透明)表示。将百分比转换为十六进制的公式如下:
计算步骤:
- 百分比转小数:40%→0.440\% \rightarrow 0.440%→0.4
- 乘以 255:255×0.4=102255 \times 0.4 = 102255×0.4=102
- 转十六进制:102102102 的十六进制是 66
结果: #D9D9D9 的 40% 透明度版本即在色值对应位置加上 66。
2. 常见透明度速查表
开发时建议直接引用以下常用值,无需重复计算:
| 透明度百分比 | 十六进制 (Hex) | 对应 Float (Compose) |
|---|---|---|
| 100% | FF | 1.0f |
| 80% | CC | 0.8f |
| 75% | BF | 0.75f |
| 50% | 80 | 0.5f |
| 40% | 66 | 0.4f |
| 20% | 33 | 0.2f |
| 10% | 1A | 0.1f |
| 0% | 00 | 0.0f |
3. 平台差异与排列顺序
🟢 Android XML (colors.xml)
严格采用 #AARRGGBB 格式(Alpha 在最前)。
- 写法:
<color name="gray_40">#66D9D9D9</color>
🔵 Compose Color 对象
直接使用十六进制整数时,顺序也是 0xAARRGGBB。
- 错误写法:
Color(0xD9D9D966)❌ (系统会将 D9 识别为透明度) - 正确写法:
Color(0x66D9D9D9)✅
4. 最佳实践:Compose "保命"写法
为了避免因记忆 ARGB 或 RGBA 顺序出错,或者在从 Figma(通常 Alpha 在后)拷贝色值时翻车,强烈建议使用 .copy() 方法:
kotlin
// 这种写法永远不会错,且可读性最高
val myColor = Color(0xFFD9D9D9).copy(alpha = 0.4f)
为什么推荐这种写法?
- 语义清晰:一眼就能看出基础色是 D9D9D9,透明度是 0.4。
- 减少计算:不需要去查表找 40% 对应的十六进制是 66。
- 动态友好:方便在代码中根据逻辑动态调整透明度(例如:
color.copy(alpha = if(isPressed) 0.5f else 1.0f))。
5. 注意事项
- 不写满 8 位会怎样? 在 Compose 中写
Color(0xD9D9D9)会被视为 0x00D9D9D9,即全透明,导致 UI 隐形。 - Figma 拷贝:Figma 导出的十六进制通常是 RRGGBBAA(透明度在后),直接粘贴到代码中必须手动将后两位移到最前面,或使用 .copy() 重新定义。