android kotlin - Extension function example

MainActivity.kt

package com.cfsuman.kotlintutorials

import android.content.Context
import android.os.Bundle
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity


class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // get the widgets reference from XML layout
        val textView = findViewById<TextView>(R.id.textView)


        // Put some dummy text to the text view
        // using extension function
        textView.dummyText()


        // Set a click listener for text view widget
        textView.setOnClickListener{
            // Display toast message using extension function
            toast("Toast using extension function")
            //toast("TextView Width : ${it.width} pixels
            // and Height: ${it.height} pixels")
        }


        // Under line text view text using extension function
        // This extension function exist in a separate file
        textView.underline()


        // Add shadow effect to text view text
        //text_view.shadow()
    }



    // Extension function which written in calling file
    private fun Context.toast(
        message: String,
        duration: Int = Toast.LENGTH_SHORT
    ){
        // Extend the Context object to show a Toast easily
        Toast.makeText(this,message,Toast.LENGTH_SHORT).show()
    }
}
MyExtensionFunctions.kt

package com.cfsuman.kotlintutorials

import android.graphics.Color
import android.graphics.Paint
import android.widget.TextView


// Extension function to extend TextView functionality
// Function make text view text to underlined
fun TextView.underline(){
    /*
        Keyword 'this' represent the object/widget which functionality
        we want to extend. In this function 'this' represent the 'TextView'
     */
    this.paintFlags = this.paintFlags or Paint.UNDERLINE_TEXT_FLAG;
}


// Get the text view width in pixels
fun TextView.width():Int{
    this.measure(0,0)
    return this.measuredWidth
}


// Get the text view height in pixels
fun TextView.height():Int{
    this.measure(0,0)
    return this.measuredHeight
}


// Add shadow to text view text
fun TextView.shadow(){
    this.setShadowLayer(
        1.3f, // radius
        4.0f, // dx
        4.0f, // dy
        Color.parseColor("#FF2B2B2B") // shadow color
    )
}


// Put some dummy text to text view
fun TextView.dummyText(){
    this.text = "Lorem Ipsum is simply dummy text of the printing and" +
            " typesetting industry. Lorem Ipsum has been the industry's" +
            " standard dummy text ever since the 1500s, when an unknown" +
            " printer took a galley of type and scrambled" +
            " it to make a type specimen book."
}
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F8F8F8"
    android:padding="24dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:fontFamily="sans-serif"
        android:textSize="28sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
More android examples