【发布时间】:2020-05-31 12:02:36
【问题描述】:
如何解析十六进制字符串,例如#9CCC65 在jetpack compose 中的Color 类中。
P.S:jetpack compose 包中似乎缺少选项
当前解决方法:
从标准 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")
}
【问题讨论】:
-
将十六进制字符串解析为
Long。将Long传递给Color()函数。 -
@CommonsWare 尝试从标准 Color 类中导出
parseColor()方法。目前它工作正常,但我认为jetpack compose 团队应该添加此方法。 -
@CommonsWare 也尝试了您的解决方案,但出现了
java.lang.NumberFormatException异常。 -
如果你真的尝试解析
#9CCC65,那将不起作用,因为#不是数字的一部分。该算法几乎与您在parseColor()中看到的一样。我不会争论 Compose 团队是否会像这样添加对颜色字符串的支持,但如果他们认为这超出了范围并且可以由应用程序或其他一些非 Compose 库轻松处理,我也不会感到惊讶. -
@CommonsWare 是的,你明白了。谢谢!
标签: android android-jetpack-compose