๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ฑ| Android/๐Ÿ“˜ | ๊ธฐ๋ก

[Android Kotlin] radio button ์˜ˆ์ œ

by immgga 2022. 4. 11.

์˜ค๋Š˜์€ ๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ radio button ์ด ํด๋ฆญ๋œ ๊ฒƒ์˜ ํ…์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€์„œ textView์— ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ๋‹ค.

 

๋จผ์ € ๋‚˜๋Š” ์ปค์Šคํ…€ ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๊ทธ๊ฒƒ์„ view binding์„ ํ†ตํ•ด ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์—

build.gradle์— ์ถ”๊ฐ€๋ฅผ ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

build.gradle(app)

plugin {
	...
}

android {
	...
    buildFeatures {
        viewBinding = true
    }
}

dependencies {
	....
}

๋ทฐ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์„œ ์ž์„ธํžˆ ์•Œ๋ ค์ฃผ์ง€ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๊ณต๋ถ€ํ•˜๊ณ  ์˜ค์‹œ๊ธธ ๋ฐ”๋ž€๋‹ค.

 

๊ทธ ๋‹ค์Œ dialog์— ์“ฐ์ผ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด ์ฃผ๋„๋ก ํ•˜์ž

 

custom_dualog_set_standard.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:cardCornerRadius="20dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:background="@color/main_color"
            android:gravity="center"
            android:textSize="35sp"
            android:text="๊ธฐ์ค€ ์„ ํƒ"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="์œ ํ˜•"
            android:textSize="20sp"
            android:layout_marginStart="30dp"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="10dp"/>

        <RadioGroup
            android:id="@+id/standard_radio_group1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="5dp"
            android:orientation="horizontal">

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="10dp"
                android:text="์—†์Œ" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="15dp"
                android:text="์‹๋‹จ" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="15dp"
                android:text="์šด๋™" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="15dp"
                android:text="๊ธ‰์‹" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="15dp"
                android:layout_marginEnd="10dp"
                android:text="์ž์œ " />
        </RadioGroup>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="๊ธฐ์ค€"
            android:textSize="20sp"
            android:layout_marginStart="30dp"
            android:layout_marginTop="20dp"
            android:layout_marginBottom="10dp"/>

        <RadioGroup
            android:id="@+id/standard_radio_group2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_gravity="center"
            android:orientation="horizontal">

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:text="์—†์Œ" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:text="์ตœ์‹ ์ˆœ" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:text="์˜ค๋ž˜๋œ์ˆœ" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:text="์ข‹์•„์š”์ˆœ" />

            <RadioButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="5dp"
                android:layout_marginEnd="5dp"
                android:text="์ถ”์ฒœ์ˆœ" />
        </RadioGroup>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_margin="20dp"
            android:orientation="horizontal">

             <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/standard_apply"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:background="@drawable/button_background"
                android:layout_marginEnd="20dp"
                android:text="์ ์šฉ"/>

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/standard_cancel"
                android:layout_width="150dp"
                android:layout_height="40dp"
                android:background="@drawable/button_background2"
                android:text="์ทจ์†Œ"/>
        </LinearLayout>

    </LinearLayout>

</androidx.cardview.widget.CardView>

 

custom_dualog_set_standard ๊ฒฐ๊ณผ

 

fragment์—์„œ ๊ธฐ๋Šฅ ๊ตฌํ˜„

 

์ด์ œ fragment์— ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด ๋ณด๋„๋ก ํ•˜์ž.

class BoardFragment: Fragment() {
	...
    
    // dialog ๊ธฐ๋Šฅ ๊ตฌํ˜„
    private fun setStandard() {
        dialog = Dialog(requireContext())
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)

        val dialogBinding: CustomDialogSetStandardBinding = CustomDialogSetStandardBinding.inflate(
            LayoutInflater.from(context))
        dialog.setContentView(dialogBinding.root)

        dialog.show()
        dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

        dialogBinding.standardApply.setOnClickListener {
            val selectedRadio1 = dialogBinding.standardRadioGroup1.checkedRadioButtonId
            val selectedRadio2 = dialogBinding.standardRadioGroup2.checkedRadioButtonId

            Log.d("Diet Management", "setStandard selected radio button: $selectedRadio1, $selectedRadio2")

            val radioBtn1 = dialog.findViewById<View>(selectedRadio1) as RadioButton?
            val radioBtn2 = dialog.findViewById<View>(selectedRadio2) as RadioButton?

            Log.d("Diet Management", "setStandard: ${radioBtn1?.text}/${radioBtn2?.text}")

            binding.standardTextview.text = "${radioBtn1?.text}/${radioBtn2?.text}"
            dialog.dismiss()
        }

        dialogBinding.standardCancel.setOnClickListener {
            dialog.dismiss()
        }
    }
}

 

1. view binding ์ถ”๊ฐ€

val dialogBinding: CustomDialogSetStandardBinding = CustomDialogSetStandardBinding.inflate(
    LayoutInflater.from(context))

 

2. dialog ๋ฐฐ๊ฒฝ ์ง€์šฐ๊ธฐ

dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))

์ € ์ฝ”๋“œ๋ฅผ ์“ฐ์ง€ ์•Š์œผ๋ฉด ๋‹ค์ด์–ผ๋กœ๊ทธ์˜ ํฐ์ƒ‰ ๋ฐฐ๊ฒฝ์ด ์ง€์›Œ์ง€์ง€ ์•Š๋Š”๋‹ค.

 

3. radio button ํด๋ฆญ id

val selectedRadio1 = dialogBinding.standardRadioGroup1.checkedRadioButtonId
val selectedRadio2 = dialogBinding.standardRadioGroup2.checkedRadioButtonId

 

4. ํ…์ŠคํŠธ ๊ฐ’ ์–ป์–ด์˜ค๊ธฐ

val radioBtn1 = dialog.findViewById<View>(selectedRadio1) as RadioButton?
val radioBtn2 = dialog.findViewById<View>(selectedRadio2) as RadioButton?

binding.standardTextview.text = "${radioBtn1?.text}/${radioBtn2?.text}"

๊ฒฐ๊ณผ ํ™”๋ฉด

ํด๋ฆญ๋œ ๋ฒ„ํŠผ๋“ค์˜ text๊ฐ€ textView์— ์ ์šฉ ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

728x90

๋Œ“๊ธ€