Android - умный способ преобразования цвета из строки в Int - PullRequest
0 голосов
/ 16 апреля 2020

Color.parseColor("#444444") работает как положено. Однако ... Color.parseColor("#444") выдает исключение.

Есть ли встроенный способ для более интеллектуального разбора цвета? К сожалению, я получаю их в разных форматах из Backend.

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

В соответствии с w3_spe c для трехзначного шестнадцатеричного цвета вам просто нужно продублировать каждое значение, как-то так:

#F3A -> #FF33AA

, поскольку вы получаете значение из бэкэнда Можно попробовать применить регулярное выражение для преобразования значения до Color.parseColor , как это (написано в Kotlin)

val color = "#FA3"
var colorConverted = color.replace("#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])".toRegex(), "#$1$1$2$2$3$3")

Вот ссылка на детская площадка, надеюсь, это поможет.

0 голосов
/ 16 апреля 2020

Спасибо @ Alejandro_r ios. Я написал расширение на основе вашего ответа

@ColorInt
fun String.toColor(): Int {
    val colorString = if(this.length == 4) {
        replace("#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])".toRegex(), "#$1$1$2$2$3$3")
    } else {
        this
    }

    return try {
        colorString.toColorInt()
    } catch (e: Exception) {
        Timber.d("Error parsing color: $this, e.message = ${e.message}")
        Color.BLACK
    }
}
0 голосов
/ 16 апреля 2020

если вы получаете colorCode в строке, то конвертируйте его здесь

 public int getParseColor(String colorCode){
        return Color.parseColor("#"+colorCode);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...