[Android] CheckedTextView

Jbro·2023년 8월 8일
1

Android 기초

목록 보기
16/23
post-thumbnail

Android의 CheckedTextView는 텍스트와 선택 상태를 동시에 표시하는 데 사용한다.

CheckBox와 거의 똑같은 기능을 구사한다고 보면 되지만, 상태를 체크하는 데 필요한 기능들을 직접 구현해줘야 한다.

코드를 통해서 CheckBox나 RadioGroup처럼 만드는 것도 가능하지만 굳이 쓸 이유가 없는 것 같다.


CheckedTextView를 포함한 xml 코드

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button" />

    <CheckedTextView
        android:id="@+id/checkedTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:clickable="true"
        android:text="CheckBox1"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <CheckedTextView
        android:id="@+id/checkedTextView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:drawableLeft="?android:attr/listChoiceIndicatorMultiple"
        android:text="CheckBox2"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <CheckedTextView
        android:id="@+id/checkedTextView3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checkMark="?android:attr/listChoiceIndicatorSingle"
        android:clickable="true"
        android:text="Radio1"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <CheckedTextView
        android:id="@+id/checkedTextView4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checkMark="?android:attr/listChoiceIndicatorSingle"
        android:clickable="true"
        android:text="Radio2"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <CheckedTextView
        android:id="@+id/checkedTextView5"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checkMark="?android:attr/listChoiceIndicatorSingle"
        android:clickable="true"
        android:text="Radio3"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />
</LinearLayout>

MainActivity 코드

class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        activityMainBinding.run{
            checkedTextView.run{
                setOnClickListener {
                    // 현재 체크 상태를 반전시킨다.
                    toggle()
                }
            }
            checkedTextView2.run{
                setOnClickListener {
                    toggle()
                }
            }

            checkedTextView3.isChecked = true

            checkedTextView3.run{
                setOnClickListener {
                    checkedTextView3.isChecked = true
                    checkedTextView4.isChecked = false
                    checkedTextView5.isChecked = false
                }
            }
            checkedTextView4.run{
                setOnClickListener {
                    checkedTextView3.isChecked = false
                    checkedTextView4.isChecked = true
                    checkedTextView5.isChecked = false
                }
            }
            checkedTextView5.run{
                setOnClickListener {
                    checkedTextView3.isChecked = false
                    checkedTextView4.isChecked = false
                    checkedTextView5.isChecked = true
                }
            }

            button.run{
                setOnClickListener {
                    checkedTextView.isChecked = true
                    checkedTextView2.isChecked = true
                }
            }
            button2.run{
                setOnClickListener {
                    checkedTextView.isChecked = false
                    checkedTextView2.isChecked = false
                }
            }
            button3.run{
                setOnClickListener { 
                    textView.text = ""
                    
                    if(checkedTextView.isChecked){
                        textView.append("CheckBox1이 체크 되어 있습니다\n")
                    } else {
                        textView.append("CheckBox1이 체크 되어 있지 않습니다\n")
                    }
                    
                    if(checkedTextView2.isChecked){
                        textView.append("CheckBox2가 체크 되어 있습니다")
                    } else {
                        textView.append("CheckBox2가 체크 되어 있지 않습니다")
                    }
                    
                    if(checkedTextView3.isChecked){
                        textView.append("Radio1이 선택되었습니다")
                    } else if(checkedTextView4.isChecked){
                        textView.append("Radio2가 선택되었습니다")
                    } else if(checkedTextView5.isChecked){
                        textView.append("Radio3이 선택되었습니다")
                    }
                }
            }
        }
    }
}

실행 화면

profile
안드로이드 개발자 꿈나무

0개의 댓글