Kotlin Extensions
I wrote a post on Butter Knife and it's beautiful features that reduce boilerplate code. If you thought that was impressive you will be even more dazzled by Kotlin Android Extensions. Kotlin Android Extensions enable us get the same result as using multiple findViewById() functions without writing any extra code.
So I will be using a basic Android app that adds two numbers and displays the answer. The aim here is not to demonstrate the functionality but rather the ease of work done with little code.
The UI
So above we have a button to add the two digits inputted by the user, the answer is displayed using the text view below the button.
I will display the XML code for clarity, so that the IDs of the views can be noted, we will be using those later.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
tools:context="com.example.charl.kotlinadd.KotlinActivity">
<EditText
android:id="@+id/firstDigitEdit_Txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="91dp"
android:ems="10"
android:inputType="number" />
<EditText
android:id="@+id/secondDigitEdit_Txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/firstDigitEdit_Txt"
android:layout_centerHorizontal="true"
android:layout_marginTop="33dp"
android:ems="10"
android:inputType="number" />
<Button
android:id="@+id/addBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/secondDigitEdit_Txt"
android:layout_centerHorizontal="true"
android:layout_marginTop="38dp"
android:text="ADD" />
<TextView
android:id="@+id/answerTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/addBtn"
android:layout_centerHorizontal="true"
android:layout_marginTop="49dp"
android:hint="0"
android:textSize="30dp" />
</RelativeLayout>
You need to configure your Kotlin as usual
You should notice these plugins and some other changes automatically in your module's build.gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
Begin using Android extensions
In order to begin, all you need is to enable the Android Extensions Gradle plugin in your module's build.gradle file:
apply plugin: 'kotlin-android-extensions'
Import synthetic properties
Though this is normally done automatically by the compiler once you start coding, you could also do it by yourself:
import kotlinx.android.synthetic.main.<layout>.*
The layout depends on the file name of your Kotlin layout file, for example if mine is activity_kotlin I am importing:
import kotlinx.android.synthetic.main.activity_kotlin.*
So the main code is below, all you need to know is actually the IDs of the views, that is basically what I used to access the views:
class KotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin)
addBtn.setOnClickListener {
/*get value from first text*/
val A = Integer.parseInt(firstDigitEdit_Txt.text.toString())
/*get value from secondtext*/
val B = Integer.parseInt(secondDigitEdit_Txt.text.toString())
/*sum it up*/
val C=A+B
/*display using text ID*/
answerTxt.setText(C.toString())
}
}
}
So there you have it, if I were to use findViewById(), it would have drastically increased the lines of code written.
Kotlin is really good and moving on very strong, Java is still very well in the game, it ain't dead, but I must say that Kotlin is really beautiful.
Top comments (0)