Si llevas algún tiempo desarrollando aplicaciones Android, probablemente ya estés cansado de trabajar con findViewById en tu día a día para recuperar vistas. O tal vez te rendiste y comenzaste a usar la famosa biblioteca Butterknife. Si ese es tu caso, entonces te encantará Kotlin Android Extensions. Kotlin tiene una inyección de vista incorporada para Android, lo que permite omitir el enlace manual o la necesidad de marcos como ButterKnife. Algunas de las ventajas son una sintaxis más agradable, mejor escritura estática y, por lo tanto, menos propenso a errores. En su proyecto local (no de nivel superior) build.gradle agregue la declaración del complemento de extensiones debajo de su complemento Kotlin, en el nivel de sangría de nivel superior.
buildscript { ... } id : "com.android.application" ... id: "kotlin-android" id "kotlin-android-extensions" ...
Uso de vistas
Suponiendo que tenemos una actividad con un diseño de ejemplo llamado activity_main.xml:
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/my_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="My button"/> </LinearLayout>
Podemos usar las extensiones de Kotlin para llamar al botón sin ningún enlace adicional como este:
Kotlin
import kotlinx.android.synthetic.main.activity_main.my_button class MainActivity: Activity() { override fun onCreate(savedInstanceBundle: Bundle?) { super.onCreate(savedInstanceBundle) setContentView(R.layout.activity_main) // my_button is already casted // to a proper type of "Button" // instead of being a "View" my_button.setText("Kotlin rocks!") } }
También puede importar todos los ID que aparecen en el diseño con una notación *
// my_button se puede usar de la misma manera que antes
importar kotlinx.android.synthetic.main.activity_main.*
Las vistas sintéticas no se pueden usar fuera de Actividades/Fragmentos/Vistas con ese diseño inflado:
Kotlin
import kotlinx.android.synthetic.main.activity_main.my_button class NotAView { init { // This sample won't compile! my_button.setText("Kotlin rocks!") } }
sabores del producto
Las extensiones de Android también funcionan con múltiples sabores de productos de Android. Por ejemplo, si tenemos sabores en build.gradle así:
android { productFlavors { paid { ... } free { ... } } }
Y, por ejemplo, solo el sabor gratuito tiene un botón de compra:
XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/buy_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Buy full version"/> </LinearLayout>
Podemos unirnos al sabor específicamente:
importar kotlinx.android.synthetic.free.main_activity.buy_button
Oyente doloroso por hacerse notar, cuando la vista está completamente dibujada ahora es tan simple e impresionante con la extensión de Kotlin
mView.afterMeasured { // inside this block the view is completely drawn // you can get view's height/width, it.height / it.width }
Bajo el capó
Kotlin
inline fun View.afterMeasured(crossinline f: View.() -> Unit) { viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener { override fun onGlobalLayout() { if (measuredHeight > 0 && measuredWidth > 0) { viewTreeObserver.removeOnGlobalLayoutListener(this) f() } } }) }
Publicación traducida automáticamente
Artículo escrito por eralokyadav2019 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA