loading...
Cover image for Kotlin Android Extensions

Kotlin Android Extensions

lemuelogbunude profile image Lemuel Ogbunude Updated on ・3 min read

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

Mountain View

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

Mountain View

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.

Posted on by:

lemuelogbunude profile

Lemuel Ogbunude

@lemuelogbunude

Software Engineer. Founder of Lemubit Academy. I love Jesus Christ and I love people.

Discussion

pic
Editor guide