Kotlin
Kotlin Android Extensions
Suche…
Einführung
Kotlin verfügt über eine integrierte View-Injection für Android, mit der manuelle Bindungen übersprungen werden können oder Rahmen wie ButterKnife erforderlich sind. Einige Vorteile sind eine schönere Syntax, eine bessere statische Typisierung und somit weniger fehleranfällig.
Aufbau
Beginnen Sie mit einem richtig konfigurierten Gradle-Projekt .
In Ihrem Projekt-local (nicht auf oberster Ebene) build.gradle
Erweiterungen anhängen unter Ihrem Kotlin Plugin, auf der obersten Ebene Einrückungsebene Plugin Erklärung.
buildscript {
...
}
apply plugin: "com.android.application"
...
apply plugin: "kotlin-android"
apply plugin: "kotlin-android-extensions"
...
Ansichten verwenden
Angenommen, wir haben eine Aktivität mit einem Beispiellayout namens 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>
Wir können Kotlin-Erweiterungen verwenden, um die Schaltfläche ohne weitere Bindung aufzurufen.
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!")
}
}
Sie können auch alle im Layout angezeigten IDs mit einer *
-Notation importieren
// my_button can be used the same way as before
import kotlinx.android.synthetic.main.activity_main.*
Synthetische Ansichten können nicht außerhalb von Aktivitäten / Fragmenten / Ansichten mit diesem aufgeblasenen Layout verwendet werden:
import kotlinx.android.synthetic.main.activity_main.my_button
class NotAView {
init {
// This sample won't compile!
my_button.setText("Kotlin rocks!")
}
}
Produktaromen
Android-Erweiterungen funktionieren auch mit mehreren Android-Produktvarianten. Zum Beispiel, wenn wir in build.gradle
haben:
android {
productFlavors {
paid {
...
}
free {
...
}
}
}
Und zum Beispiel hat nur der freie Geschmack einen Buy-Button:
<?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>
Wir können uns speziell an den Geschmack binden:
import kotlinx.android.synthetic.free.main_activity.buy_button
Ein schmerzhafter Zuhörer, wenn Sie Kenntnis erhalten, wenn die Ansicht jetzt vollständig gezeichnet ist, ist dies mit Kotlins Erweiterung so einfach und fantastisch
mView.afterMeasured {
// inside this block the view is completely drawn
// you can get view's height/width, it.height / it.width
}
Unter der Haube
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()
}
}
})
}