Skip to main content

Tri-States | Indeterminate Checkbox Android

Sometimes it is required to implement checkbox with 3 states


Unchecked
Checked
Indeterminate


So here is a simple example of how to implement Tri-States or you can say Indeterminate Checkbox Android
First of all, make a custom class which is extend Checkbox



import android.content.Context
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatCheckBox
import com.android.tristatescheckbox.R

class TriStatesCheckBox : AppCompatCheckBox {
    private var state = 0

    constructor(context: Context?) : super(context) {
        init()
    }

    constructor(context: Context?, attrs: AttributeSet?) : super(
        context,
        attrs
    ) {
        init()
    }

    constructor(
        context: Context?,
        attrs: AttributeSet?,
        defStyleAttr: Int
    ) : super(context, attrs, defStyleAttr) {
        init()
    }

    private fun init() {
        state = UNCHECKED
        updateBtn()
        setOnCheckedChangeListener { buttonView, isChecked ->
            // checkbox status is changed from uncheck to checked.
            state = when (state) {
                INDETERMINATE -> CHECKED
                UNCHECKED -> INDETERMINATE
                CHECKED -> UNCHECKED
                else -> CHECKED
            }
            updateBtn()
        }
    }

    private fun updateBtn() {
        var btnDrawable = R.drawable.ic_indeterminate
        btnDrawable = when (state) {
            INDETERMINATE -> R.drawable.ic_indeterminate
            UNCHECKED -> R.drawable.ic_unchecked
            CHECKED -> R.drawable.ic_checked
            else -> R.drawable.ic_unchecked
        }
        setButtonDrawable(btnDrawable)
    }

    fun getState(): Int {
        return state
    }

    fun setState(state: Int) {
        this.state = state
        updateBtn()
    }

    companion object {
        private const val UNCHECKED = 0
        private const val INDETERMINATE = 1
        private const val CHECKED = 2
    }
}

Then after using this like below



<com.android.tristatescheckbox.view.TriStatesCheckBox
        android:id="@+id/checkbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


Here is the output









Click Here to get full source code with example 







Comments

Popular posts from this blog

API Level in Android

Android Version Released API Level Name Build Version Code Android 7.1 December 2016 25 Nougat Android.OS.BuildVersionCodes.NMr1 Android 7.0 August 2016 24 Nougat Android.OS.BuildVersionCodes.N Android 6.0 August 2015 23 Marshmallow Android.OS.BuildVersionCodes.M Android 5.1 March 2015 22 Lollipop Android.OS.BuildVersionCodes.LollipopMr1 Android 5.0 November 2014 21 Lollipop Android.OS.BuildVersionCodes.Lollipop Android 4.4W June 2014 20 Kitkat Watch Android.OS.Bui...

HORIZONTAL FLIP ANIMATION: VIEW PAGER TRANSFORMATION ANIMATION ANDROID

Here I am sharing you a View Pager Transformation Animation Class By Which you can give a transformation animation to you view Pager First of all, create a simple view pager example. If you don't know how to create an example for simple view pager then click below link for creating simple view pager example in android Simple View Pager Example in Android Copy below class and Paste into your project Set Page Transformer to your view pager like below viewpager.setPageTransformer(true, new HorizontalFlip Transformation ()); That's It you're done.