Cómo usar "setTextColor (hexaValue)" en Kotlin para Android,

Fondo

En Java, pude cambiar directamente el color del text de una Vista de text, usando el valor hexadecimal estándar de la misma:

textView.setTextColor(0xffffffff); //white textView.setTextColor(0x00000000); //transparent textView.setTextColor(0xff000000); //black textView.setTextColor(0xff0000ff); //blue //etc... 

Muy fácil…

El problema

En Kotlin, si trato de escribir tal cosa, me sale un error de compilation extraño:

Error: (15, 18) No se puede invocar ninguna de las siguientes funciones con los arguments suministrados: público abierto divertido setTextColor (p0: ColorStateList!): Unidad definida en android.widget.TextView public open fun setTextColor (p0: Int): Unidad definido en android.widget.TextView

Lo que he intentado

Traté de search sobre esto a través de Internet, y no pude ver nada especial sobre los valores hexadecimales. Parece lo mismo que en Java:

https://kotlinlang.org/docs/reference/basic-types.html

Entonces decidí simplemente escribir en Java y convertir a Kotlin. El resultado es muy ilegible en términos del valor del color:

  textView.setTextColor(-0x1) //white textView.setTextColor(0x00000000) //transparent textView.setTextColor(-0x1000000) //black textView.setTextColor(-0xffff01) //blue 

Para mí, parece que el valor hexadecimal de Integer que se utiliza para Kotlin está firmado, mientras que en Java se convierte en uno firmado automáticamente, por lo que esto provoca el cambio de valores y la necesidad de establecer un signo less cuando sea necesario.

Lo único que se me ocurre, que todavía permite leerlo bien, es algo como esto:

 textView.setTextColor(Integer.parseUnsignedInt("ffff0000",16)); 

Sin embargo, esto tiene múltiples desventajas:

  1. Es mucho más largo.
  2. Convierte una cadena, por lo que es mucho less eficiente
  3. Lo más importante: funciona solo desde API 26 (Android O), que actualmente está activo en aproximadamente el 1% de los dispositivos Android en todo el mundo.

Las preguntas

¿Por qué ocurre?

¿Qué puedo hacer exactamente para que sea lo más legible, sin conversiones de cadenas, y funcione en todas las versiones de Android (minSdkVersion 14 en mi caso)?

    Oxff000000 se resuelve en Long in Kotlin, por lo que ahora no hay forma de usar este literal tal como está, sin embargo, 0xff000000.toInt() le dará exactamente el mismo resultado que -0x1000000 para que pueda usar el enfoque .toInt() . Debajo del capó, es el equivalente de (int)4278190080L Java elenco.

    Además, con las extensiones de Kotlin puedes escribir una propiedad simple como esa

     var TextView.textColor: Long get() { //... not important } set(value: Long) { this.setTextColor(value.toInt()) } 

    y podrá usar una syntax más concisa textView.textColor = 0xff000000

    Puede intentar esto para establecer el color de su text mediante progtwigción.

     textview.textColor=Color.parseColor("#22aadd")