Android KTX: Mejorando Kotlin en Android

Este artículo es una traducción de un artículo del blog de Android: https://android-developers.googleblog.com/2018/02/introducing-android-ktx-even-sweeter.html

Hoy nos complace anunciar la preview de Android KTX, un conjunto de extensiones diseñadas para hacer que escribir Kotlin para Android sea más conciso, idiomático y agradable. Android KTX proporciona una capa de API tanto para el framework de Android como para la librería de soporte para hacer que escribir Kotlin sea más natural.

La porción de Android KTX que cubre el framework de Android está ya disponible en nuestro repositorio de GitHub. Os invitamos a probarlo, a darnos vuestra opinión y a contribuir. Las otras partes de Android KTX que cubren la librería de soporte de Android estarán disponibles en las próximas versiones de la librería de soporte.

Echemos un vistazo a algunos ejemplos de cómo Android KTX os puede ayudar a escribir código Kotlin más natural y conciso.

Ejemplos de código usando Android KTX

De String a Uri

Empecemos este ejemplo sencillo. Normalmente, llamaríais a Uri.parse(uriString). Android KTX añade una función de extensión a la clase String que os permite convertir cadenas de URIs de forma más natural:

Kotlin Kotlin con Android KTX
val uri = Uri.parse(myUriString)
val uri = myUriString.toUri()

Editar SharedPreferences

Editar SharedPreferences es algo muy común. El código con Android KTX es ligeramente más corto y más natural de leer y escribir.

Kotlin Kotlin con Android KTX
sharedPreferences.edit()
           .putBoolean(key, value)
           .apply()
sharedPreferences.edit { 
    putBoolean(key, value) 
}

 Trasladando la diferencia de un contorno

En el código de abajo, trasladamos la diferencia entre dos contornos 100 píxeles.

Kotlin Kotlin con Android KTX
val pathDifference = Path(myPath1).apply {
   op(myPath2, Path.Op.DIFFERENCE)
}

val myPaint = Paint()

canvas.apply {
   val checkpoint = save()
   translate(0F, 100F)
   drawPath(pathDifference, myPaint)
   restoreToCount(checkpoint)
}
val pathDifference = myPath1 - myPath2

canvas.withTranslation(y = 100F) {
   drawPath(pathDifference, myPaint)
}

Acción onPreDraw sobre una vista

Este ejemplo produce una acción con un callback onPreDraw. Sin Android KTX, hay que escribir bastante código.

Kotlin Kotlin con Android KTX
view.viewTreeObserver.addOnPreDrawListener(
       object : ViewTreeObserver.OnPreDrawListener {
           override fun onPreDraw(): Boolean {
               viewTreeObserver.removeOnPreDrawListener(this)
               actionToBeTriggered()
               return true
           }
       })

 

view.doOnPreDraw {
    actionToBeTriggered()
}

 

Hay muchos más sitios donde Android KTX puede simplificar vuestro código. Podéis leer la documentación completa del API en GitHub.

Empezando

Para empezar a usar Android KTX en vuestros proyectos de Android en Kotlin, añadid lo siguiente a vuestro archivo build.gradle de vuestro módulo:

repositories {
    google()
}

dependencies {
    // Android KTX for framework API
    implementation 'androidx.core:core-ktx:0.1'
    ...
}

Y tras sincronizar vuestro proyecto, las extensiones aparecerán automáticamente en la lista de autocompletado del IDE. Al seleccionar una extensión se añade los imports necesarios en vuestro archivo.

Sed conscientes de que es muy probable que el API cambie durante el tiempo que esté en preview. Si decidís usarlo ahora en vuestros proyectos, debéis aceptar que vayan a haber cambios que rompan código hasta que llegue a su versión estable.

androix: ¡Hola Mundo!

Puede que hayáis notado que Android KTX usa nombres de paquete que comienzan por androix. Este es el nuevo prefijo de paquete que vamos a usar en las futuras versiones de la librería de soporte de Android. Esperamos que la separación entre android.* y androidx.* haga más obvio qué APIs son parte de la plataforma, y qué son librerías estáticas para desarrolladores de aplicaciones que funcionan entre versiones diferentes de Android.

¿Y luego qué?

La preview de hoy es solo el principio. En los próximos meses, iteraremos sobre las APIs conforme vayamos incorporando vuestros comentarios y contribuciones. Cuando el API se haya estabilizado y podamos comprometernos con la compatibilidad del API, tenemos intención de liberar Android KTX como parte de la librería de soporte de Android.

¡Estamos ansiosos por construir Android KTX junto a vosotros!

¡Feliz Kotlineado!