27

#9CCC65たとえば、jetpack 構成のColorクラスで16 進文字列を解析する方法。

PS: jetpack 構成パッケージにオプションがないようです


現在の回避策: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")
}
4

7 に答える 7

27

文字列として渡す代わりに、16 進数として渡します。たとえば、この#9CCC65色が必要な場合は、前面#を削除して 0xFF に置き換えます。例

val PrimaryBlue = Color(0xFF9CCC65)
于 2020-12-11T15:03:44.283 に答える
5

もう 1 つのオプションは、android.graphics.Color の動作に似た拡張関数を作成することです。

import androidx.compose.ui.graphics.Color

fun Color.Companion.parse(colorString: String): Color =
    Color(color = android.graphics.Color.parseColor(colorString))

次に、次のように構成を記述できます。

Modifier.background(Color.parse("#FF0000"))
于 2021-03-28T16:13:57.013 に答える
0

をインポートする必要を避けたい場合はandroid.graphics.Color、別の簡単な代替手段を次に示します。

val hexString = "#f8f8f2"
Color(("ff" + hexString.removePrefix("#").lowercase()).toLong(16))

Colorこの場合、すぐに からのものになりandroidx.compose.ui.graphics.Colorます。

于 2022-02-09T15:06:03.230 に答える