MOBILE PROGRAMING

[모바일 프로그래밍] 파운드 버튼과 이벤트 처리

ch010104 2025. 9. 24. 22:56

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", "체크박스 클릭")
}