본문 바로가기
Android App/Kotlin

위젯 사용예제-라디오버튼, 체크박스, 프로그래스바

by AppJinny 2022. 11. 3.

*위젯 사용예제-라디오버튼, 체크박스, 프로그래스바

 

-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"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="선택값"
        android:textSize="24sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <RadioButton
            android:id="@+id/radioApple"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="사과"
            android:textSize="24sp" />

        <RadioButton
            android:id="@+id/radioBanana"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="바나나"
            android:textSize="24sp" />

        <RadioButton
            android:id="@+id/radioOrange"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="오렌지"
            android:textSize="24sp" />
    </RadioGroup>

</androidx.constraintlayout.widget.ConstraintLayout>

 

-build.gradle

buildFeatures {
    viewBinding true
}

 

-MainActivity.kt

class MainActivity : AppCompatActivity() {

    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

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

        binding.radioGroup.setOnCheckedChangeListener { group, checkedId ->
            when(checkedId) {
                R.id.radioApple -> binding.textView.text = "사과"
                R.id.radioBanana -> binding.textView.text = "바나나"
                R.id.radioOrange -> binding.textView.text = "오렌지"
            }
        }
    }
}

 

 

 

-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"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="결과"
        android:textSize="18sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="1dp"
        android:layout_marginLeft="1dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="1dp"
        android:layout_marginRight="1dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <CheckBox
            android:id="@+id/checkApple"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="사과" />

        <CheckBox
            android:id="@+id/checkBanana"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="바나나" />

        <CheckBox
            android:id="@+id/checkOrange"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="오렌지" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

 

-build.gradle

buildFeatures {
    viewBinding true
}

 

-MainActivity.kt

class MainActivity : AppCompatActivity() {

    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    //false를 기본값으로 가지고 있는 변수 생성
    var apple = false
    var banana = false
    var orange = false

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

        binding.checkApple.setOnCheckedChangeListener { buttonView, isChecked ->
            apple = isChecked
            printCheckedItems()
        }
        binding.checkBanana.setOnCheckedChangeListener { buttonView, isChecked ->
            banana = isChecked
            printCheckedItems()
        }
        binding.checkOrange.setOnCheckedChangeListener { buttonView, isChecked ->
            orange = isChecked
            printCheckedItems()
        }
    }


    //함수 printCheckedItems()를 생성하고 변수 result의 최종 결과 값이 텍스트뷰에 출력
    //앞에서 생성한 false를 기본값으로 가지고 있는 변수들을 이용해 작성
    //사과의 리스너 코드 중 apple = isChecked 가 되었을 때 함수 printCheckedItems() 실행
    //apple의 값이 true가 된 상태에서 printCheckedItems()로 넘어와 조건식을 실행 시켰으므로
    //if (apple) result = " 사과" 는 만약 apple의 값이 선택(true)되었다면 result에는 "사과" 라는 문자열 기입

    //만약 사과와 바나나를 선택했을 때
    //if (apple) result = " 사과" 조건식으로 빈 값이었던 result는 " 사과"의 문자열을 가지게 됨
    //그리고 바나나 조건식을 보면 바나나가 선택되었을 떄 result의 값이 현재 빈 값이 아니면 result값 뒤에 "와" 를 붙임(+=)
    //if (result.isNotEmpty()) result += "와"  result += " 바나나" 를 차례대로 result에 붙임
    //이렇게 조건식을 거쳐 textView에는 result적용 : "${result}" 형식으로 출력되게 작성

    fun printCheckedItems() {
        var result = ""
        if (apple) result = " 사과"

        if (banana) {
            if (result.isNotEmpty()) result += "와"
            result += " 바나나"
        }
        if (orange) {
            if (result.isNotEmpty()) result += "와"
            result += " 오렌지"
        }
        binding.textView.text = "${result}가 선택되었습니다."
    }

}

 

 

 

-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"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/progressLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ProgressBar
            android:id="@+id/progressBar"
            style="?android:attr/progressBarStyle"
            android:layout_width="100dp"
            android:layout_height="100dp" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="0"
            android:textSize="36sp" />
    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

-build.gradle

buildFeatures {
    viewBinding true
}

 

-MainActivity.kt

class MainActivity : AppCompatActivity() {

    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

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

        //백그라운드 스레드 생성 thread(start=true) {}
        //for함수를 이용해 i가 0부터 100 될 때까지 조건식 반복
        //Thread.sleep(1000) 를 사용해 1000밀리초(1초) 뒤 다음 코드 실행
        //runOnUiThread {} 를 사용해 메인스레드에서 UI관련 코드가 실행될 수 있도록 함
        //i의 값이 1씩 증가하도록 작성 binding.textView.text = "${i+1}"
        thread(start=true) {
            for (i in 0 until 100) {
                Thread.sleep(1000)
                runOnUiThread {
                    binding.textView.text = "${i+1}"
                }
            }
        }
    }
}

 

 


이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.

'Android App > Kotlin' 카테고리의 다른 글

4대 메이저 컴포넌트-Activity, Broadcast Receiver, Service, Content Provider  (0) 2022.11.09
뷰 바인딩(View Binding)  (0) 2022.11.04
위젯-RatingBar  (0) 2022.11.03
위젯-SeekBar  (0) 2022.11.03
위젯-ProgressBar  (0) 2022.11.03