如何解析十六进制字符串,例如jetpack compose中Color类中的#9CCC65
。
附言:Jetpack合成包中似乎缺少选项
**目前的解决方法:**已从标准Color类别汇出parseColor()
方法。
@ColorInt
fun parseColor(@Size(min = 1) colorString: String): Int {
if (colorString[0] == '#') { // Use a long to avoid rollovers on #ffXXXXXX
var color = colorString.substring(1).toLong(16)
if (colorString.length == 7) { // Set the alpha value
color = color or -0x1000000
} else require(colorString.length == 9) { "Unknown color" }
return color.toInt()
}
throw IllegalArgumentException("Unknown color")
}
8条答案
按热度按时间ggazkfy81#
不作为String传递,而是作为Hexadecimal传递。例如,如果你想要这个
#9CCC65
Color,只需要移除前面的#
并替换为0xFF。示例a6b3iqyw2#
您可以将此对象类别与getColor方法搭配使用。
或者我们可以使用扩展函数
Jetpack Color类(即
androidx.ui.graphics.Color
)在构造函数中只接受RGB、ARGB、ColorSpace和colorInt。请参见:Color.kt
因此,这里我们直接从返回colorInt的
android.graphics.Color
访问parseColor()
方法。因此,parseColor()方法可用于获取colorInt,然后将其提供给Jetpack Color类以获取
androidx.ui.graphics.Color
对象。jdgnovmf3#
类似于
Int.dp
,可以有String.color
扩展属性。这可用作颜色十六进制
String
的成员属性。carvr3hs4#
另一个选择是编写一个类似android.graphics.color工作方式的扩展函数:
然后你可以这样写你的作品:
xriantvc5#
不依赖于Android的解决方案如何?#KMP
ct3nt3jp6#
我也遇到过这个问题,我终于找到了解决办法:
elcex8rz7#
十六进制字符串到颜色[此扩展函数在android sdk内部可用]
如果你想转换回十六进制代码
如果u也想要alpha值
pu3pd22g8#
如果您不想导入
android.graphics.Color
,这里有另一个简单的方法:在这种情况下,
Color
将直接是来自androidx.compose.ui.graphics.Color
的一个。