Zoeken…


Invoering

Kotlin heeft een ingebouwde weergave-injectie voor Android, waardoor handmatig binden of het gebruik van frameworks zoals ButterKnife wordt overgeslagen. Enkele voordelen zijn een mooiere syntaxis, beter statisch typen en dus minder foutgevoelig.

Configuratie

Begin met een correct geconfigureerd gradle-project .

build.gradle in uw projectlokaal (niet op het hoogste niveau) build.gradle extensie- build.gradle toe onder uw Kotlin-plug-in, op inspringniveau op het hoogste niveau.

buildscript {
    ...
}

apply plugin: "com.android.application"
...
apply plugin: "kotlin-android"
apply plugin: "kotlin-android-extensions"
...

Weergaven gebruiken

Ervan uitgaande dat we een activiteit hebben met een voorbeeldlay-out genaamd 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>

We kunnen Kotlin-extensies gebruiken om de knop aan te roepen zonder extra binding zoals:

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!")
    }
}

U kunt ook alle ID's importeren die in de lay-out verschijnen met een * -notatie

// my_button can be used the same way as before
import kotlinx.android.synthetic.main.activity_main.*

Synthetische weergaven kunnen niet worden gebruikt buiten activiteiten / fragmenten / weergaven met die lay-out opgeblazen:

import kotlinx.android.synthetic.main.activity_main.my_button

class NotAView {
    init {
        // This sample won't compile!
        my_button.setText("Kotlin rocks!")
    }
}

Product smaken

Android-extensies werken ook met meerdere Android-productflavours. Als we bijvoorbeeld smaken hebben in build.gradle :

android {
    productFlavors {
        paid {
            ...
        }
        free {
            ...
        }
    }
}

En bijvoorbeeld, alleen de gratis smaak heeft een koopknop:

<?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>

We kunnen specifiek aan de smaak binden:

import kotlinx.android.synthetic.free.main_activity.buy_button

Pijnlijke luisteraar voor het krijgen van kennisgeving, wanneer het beeld nu volledig is getekend, is zo eenvoudig en geweldig met de extensie van Kotlin

mView.afterMeasured {
  // inside this block the view is completely drawn
  // you can get view's height/width, it.height / it.width
}

Onder de motorkap

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow