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

  1. Our Forex Trading Platform is designed to deliver a seamless, secure, and efficient trading experience for traders of all skill levels. Access real-time market data, advanced charting tools, fast order execution, and a wide range of currency pairs from a single intuitive platform. Whether you're trading from your desktop or mobile device, our platform provides the flexibility and reliability you need to analyze market trends, execute trades with confidence, and pursue your financial goals in the global forex market.
    Contact us Address — 1st Floor, The Sotheby Building, Rodney Bay, Gros-Islet, SAINT Lucia P.O Box 838, Castries, Saint Lucia Phone no — +97144471894 Website — https://winprofx.org/

    ReplyDelete

Post a Comment

Popular posts from this blog

Sticky Header Smooth Recycler view in Android

> Here is the example of Sticky Header view in recycler view with smooth scroll > Sticky header is a View over recycler view that will Stick on header of recycler view and shows some information > In this example i have filtered out the alphabets that will stick on header of recycler view. > Follow the following Steps to make a Recycler View with Sticky Header. > Here arrays.xml contains some dummy names so we can show up a demo. > Run this application and see the sticky header in your screen. > You can see the output in following video

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...