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()
        }
    }
})
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow