1. 선택의 상태를 담다: 컴파운드 버튼 (CompoundButton)
- 선택/해제 상태를 가질 수 있는 버튼들의 상위 클래스
- Button 클래스를 상속받으며, 우리가 흔히 사용하는 체크박스, 라디오버튼, 스위치 등이 모두 이 클래스에 속함

컴파운드 버튼의 종류
- 체크박스 (CheckBox):
- 여러 항목 중에서 원하는 것들을 자유롭게 중복 선택할 수 있음
- 각 체크박스는 서로 독립적으로 동작
- android:checked="true" 속성을 사용하면 기본적으로 선택된 상태로 만들 수 있음
<CheckBox
android:id="@+id/android"
android:text="안드로이드폰"
[cite_start]android:checked="true"/>
<CheckBox
android:id="@+id/iphone"
[cite_start]android:text="아이폰" />
- 스위치(Switch)와 토글버튼(ToggleButton):
- 두 위젯은 모양은 다르지만, 'On/Off' 상태를 표시하는 동일한 용도로 사용
<Switch
[cite_start]android:checked="true" />
<ToggleButton
[cite_start]android:checked="false" />
- 라디오버튼(RadioButton)과 라디오그룹(RadioGroup):
- 여러 옵션 중 단 하나만 선택해야 할 때 사용
- 라디오버튼들이 단일 선택 기능을 하려면 반드시RadioGroup으로 묶음
- 같은 그룹 내에서는 하나의 라디오버튼만 활성화
<RadioGroup [cite_start]android:id="@+id/rGroup1" > <RadioButton [cite_start]android:text="남성" /> <RadioButton [cite_start]android:text="여성" /> </RadioGroup>
2. XML과 코드를 연결하는 다리: 뷰 바인딩 (View Binding)
- 뷰 바인딩은 XML 레이아웃 파일에 정의된 뷰 객체들을 코드에서 간편하게 사용하기 위한 기능
- findViewById() 함수 없이도 위젯에 직접 접근할 수 있어 코드가 간결해지고 안정성이 높아짐
- 설정:
- build.gradle 파일의 android 블록 안에 viewBinding.isEnabled = true를 추가하여 활성화 - 사용:
- XML 파일명을 기반으로 바인딩 클래스가 자동으로 생성(예: activity_main.xml -> ActivityMainBinding)
- inflate() 함수로 객체를 얻은 후 setContentView()에 binding.root를 전달하여 화면을 설정 - 위젯 접근:
- binding.위젯ID 형식으로 XML에 선언된 모든 위젯에 직접 접근할 수 있음
3. 사용자의 동작에 반응하기: 뷰 이벤트 처리
- 이벤트 처리는 사용자의 특정 행동(클릭, 상태 변경 등)에 따라 앱이 반응하도록 만드는 과정
- 이벤트 소스, 이벤트 핸들러, 리스너 세 가지 요소로 구성

- 이벤트 소스: 이벤트가 발생한 위젯 객체 (예: 체크박스).
- 이벤트 핸들러: 이벤트가 발생했을 때 실행될 로직이 담긴 객체.
- 리스너: 이벤트 소스와 핸들러를 연결하는 함수.
CheckBox 이벤트 처리 예시 (SAM 기법)
- SAM(Single Abstract Method) 기법을 지원하여 자바 인터페이스를 람다식으로 간결하게 표현할 수 있음
- 체크박스의 체크 상태가 변경될 때마다 로그를 출력하는 코드
// binding 객체는 미리 선언되었다고 가정
// binding.checkbox가 '이벤트 소스'
// setOnCheckedChangeListener가 '리스너'
// { ... } 블록이 '이벤트 핸들러'의 역할을 함
binding.checkbox.setOnCheckedChangeListener { compoundButton, isChecked ->
// isChecked 변수로 현재 체크 상태(true/false)를 알 수 있음
Log.d("kkang", "체크박스 클릭")
}
'MOBILE PROGRAMING' 카테고리의 다른 글
| [모바일 프로그래밍] LinearLayout 안드로이드 레이아웃 (0) | 2025.09.29 |
|---|---|
| [모바일 프로그래밍] 이미지뷰와 이미지버튼 실습 (0) | 2025.09.29 |
| [모바일 프로그래밍] 뷰(View)와 기본 위젯 (0) | 2025.09.22 |
| [모바일 프로그래밍] 코틀린(Kotlin)이란? ( 3 ) - 실습 (0) | 2025.09.17 |
| [모바일 프로그램밍] 코틀린(Kotlin)이란? ( 2 ) (0) | 2025.09.15 |