Цвет из шестнадцатеричной нити в реактивном наборе - PullRequest
2 голосов
/ 16 февраля 2020

Как разобрать шестнадцатеричную строку, например #9CCC65 в Цвет класс в наборе Jetpack.

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")
}

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Опираясь на ответ @Tigran, лучший способ использовать его - object класс в Kotlin.

object ColorUtils {
    fun getColor(colorString: String): Color {
        return Color(android.graphics.Color.parseColor("#" + colorString))
    }
}

Jetpack Color класса, т. Е. androidx.ui.graphics.Color занимает только RGB , ARGB , ColorSpace и colorInt в конструкторе. См .: Color.kt

Итак, здесь мы напрямую обращаемся к parseColor() методу из android.graphics.Color, который возвращает colorInt .

Следовательно * Метод 1025 * можно использовать для получения colorInt и последующего предоставления его классу Jetpack Color для получения androidx.ui.graphics.Color объекта.

0 голосов
/ 01 марта 2020

Вы можете использовать этот класс с методом getColor stati c.

class HexToJetpackColor {

    companion object {
        fun getColor(colorString: String): Color {
            return Color(android.graphics.Color.parseColor("#" + colorString))
        }
    }
}
...