Kotlin
Kotlin Android Extensions
Recherche…
Introduction
Kotlin a une injection de vue intégrée pour Android, permettant de sauter la liaison manuelle ou de recourir à des frameworks tels que ButterKnife. Certains des avantages sont une syntaxe plus agréable, un meilleur typage statique et sont donc moins sujets aux erreurs.
Configuration
Commencez avec un projet de graduation correctement configuré .
Dans votre projet local (pas de niveau supérieur) build.gradle
ajoutez la déclaration du plug-in d'extensions sous votre plug-in Kotlin, au niveau de l'indentation de niveau supérieur.
buildscript {
...
}
apply plugin: "com.android.application"
...
apply plugin: "kotlin-android"
apply plugin: "kotlin-android-extensions"
...
Utiliser des vues
En supposant que nous ayons une activité avec un exemple de disposition appelé activity_main.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>
Nous pouvons utiliser les extensions Kotlin pour appeler le bouton sans aucune liaison supplémentaire, comme ceci:
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!")
}
}
Vous pouvez également importer tous les identifiants apparaissant dans la présentation avec une notation *
// my_button can be used the same way as before
import kotlinx.android.synthetic.main.activity_main.*
Les vues synthétiques ne peuvent être utilisées en dehors des activités / fragments / vues avec cette disposition gonflée:
import kotlinx.android.synthetic.main.activity_main.my_button
class NotAView {
init {
// This sample won't compile!
my_button.setText("Kotlin rocks!")
}
}
Saveurs du produit
Les extensions Android fonctionnent également avec plusieurs arômes de produit Android. Par exemple, si nous avons des build.gradle
dans build.gradle
comme ceci:
android {
productFlavors {
paid {
...
}
free {
...
}
}
}
Et par exemple, seule la saveur gratuite a un bouton d'achat:
<?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>
Nous pouvons nous lier à la saveur en particulier:
import kotlinx.android.synthetic.free.main_activity.buy_button
Un auditeur assidu pour obtenir un avis, lorsque la vue est complètement dessinée maintenant est tellement simple et génial avec l'extension de Kotlin
mView.afterMeasured {
// inside this block the view is completely drawn
// you can get view's height/width, it.height / it.width
}
Sous la capuche
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()
}
}
})
}