Vip*_*sri 18 android android-jetpack-compose
如何解析十六进制字符串如#9CCC65在颜色类Jetpack的撰写。
PS:jetpack compose 包中似乎缺少选项
当前解决方法:parseColor()从标准 Color 类
导出的方法。
@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")
}
Run Code Online (Sandbox Code Playgroud)
Om *_*mar 22
与 类似Int.dp,可以有String.color扩展属性。
val String.color
get() = Color(android.graphics.Color.parseColor(this))
Run Code Online (Sandbox Code Playgroud)
这可以用作 color hex 的成员属性String。
"#FF0000".color
Run Code Online (Sandbox Code Playgroud)
Tob*_*237 18
我也遇到了这个问题,最后找到了解决方案:
val myColorString = "#B00020"
val myComposeColorInt = Color(myColorString.toColorInt())
Run Code Online (Sandbox Code Playgroud)
abh*_*era 18
十六进制字符串到颜色 [此扩展功能在 android sdk 中可用]
Color("#FFFFFF".toColorInt())
Run Code Online (Sandbox Code Playgroud)
如果你想转换回十六进制代码
fun Color.toHexCode(): String {
val red = this.red * 255
val green = this.green * 255
val blue = this.blue * 255
return String.format("#%02x%02x%02x", red.toInt(), green.toInt(), blue.toInt())
}
Run Code Online (Sandbox Code Playgroud)
如果你也想要 alpha 值
fun Color.toHexCodeWithAlpha(): String {
val alpha = this.alpha*255
val red = this.red * 255
val green = this.green * 255
val blue = this.blue * 255
return String.format("#%02x%02x%02x%02x", alpha.toInt(),red.toInt(), green.toInt(), blue.toInt())
}
Run Code Online (Sandbox Code Playgroud)
如果我们处于组合多平台或基于 jvm 的单元测试中,则toColorInt()扩展将不可用,您可以使用它
Color("#FFFFFF".toColorInt())
Run Code Online (Sandbox Code Playgroud)
May*_*hwa 14
不是作为字符串传递而是作为十六进制传递。例如,如果您想要此#9CCC65颜色,只需删除前面#并将其替换为 0xFF。例子
val PrimaryBlue = Color(0xFF9CCC65)
Run Code Online (Sandbox Code Playgroud)
Chr*_*ris 13
另一种选择是编写一个类似于 android.graphics.Color 工作方式的扩展函数:
import androidx.compose.ui.graphics.Color
fun Color.Companion.parse(colorString: String): Color =
Color(color = android.graphics.Color.parseColor(colorString))
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样写你的文章:
Modifier.background(Color.parse("#FF0000"))
Run Code Online (Sandbox Code Playgroud)
Maj*_*eee 12
不依赖Android的解决方案怎么样?#KMP
val hashColorString = "#00AB18"
val color = Color(hashColorString.removePrefix("#").toLong(16) or 0x00000000FF000000)
Run Code Online (Sandbox Code Playgroud)
Tig*_*yan 11
您可以将此对象类与 getColor 方法一起使用。
object HexToJetpackColor {
fun getColor(colorString: String): Color {
return Color(android.graphics.Color.parseColor("#" + colorString))
}
}
Run Code Online (Sandbox Code Playgroud)
Jetpack Color 类即androidx.ui.graphics.Color只在构造函数中采用 RGB、ARGB、ColorSpace 和 colorInt。看:Color.kt
所以,在这里我们直接访问返回 colorInt 的parseColor()方法android.graphics.Color。
因此可以使用 parseColor() 方法获取 colorInt,然后将其提供给 Jetpack Color 类以获取androidx.ui.graphics.Color对象。
| 归档时间: |
|
| 查看次数: |
3800 次 |
| 最近记录: |