android kotlin – Extension function example

android kotlin – Extension function example

MainActivity.kt


package com.cfsuman.kotlinexamples

import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import android.widget.Toast


class MainActivity : AppCompatActivity() {

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

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


        // Set a click listener for text view widget
        text_view.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
        text_view.underline()


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



    // Extension function which written in calling file
    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.kotlinexamples

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"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/root_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#fffdff"
    android:orientation="vertical"
    android:padding="16dp"
    >
    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="35sp"
        android:layout_margin="5dp"
        />
</LinearLayout>

Original Article

Leave a Reply

Your email address will not be published. Required fields are marked *