如何解析十六进制字符串,如#9CCC65在颜色类中的jetpack组合。
P.S: jetpack组合软件包中似乎缺少选项
当前解决方案:从标准颜色类导出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")
}发布于 2020-03-01 20:32:01
可以将此对象类与getColor方法一起使用。
object HexToJetpackColor {
fun getColor(colorString: String): Color {
return Color(android.graphics.Color.parseColor("#" + colorString))
}
}或者我们可以使用扩展函数
fun Color.fromHex(color: String) = Color(android.graphics.Color.parseColor("#" + colorString))Jetpack类,即androidx.ui.graphics.Color只在构造函数中使用RGB、ARGB、ColorSpace和colorInt。请参阅:Color.kt
因此,这里我们直接从返回parseColor()的android.graphics.Color访问colorInt方法。
因此,可以使用parseColor()方法获取colorInt,然后将其提供给Jetpack类以获取androidx.ui.graphics.Color对象。
发布于 2020-12-11 15:03:44
而不是作为字符串传递,而是作为十六进制传递。例如,如果您想要这个#9CCC65颜色,只需删除前面的#并将其替换为0xFF。示例
val PrimaryBlue = Color(0xFF9CCC65)发布于 2021-05-31 14:55:07
与Int.dp类似,可以有String.color扩展属性。
val String.color
get() = Color(android.graphics.Color.parseColor(this))这可以用作彩色十六进制String上的成员属性。
"#FF0000".colorhttps://stackoverflow.com/questions/60247480
复制相似问题