본 글은 Do it! 안드로이드 앱 프로그래밍을 참조하여 작성되었습니다.
버튼은 텍스트뷰 (TextView)를 상속하여 정의도어 있기 때문에, 텍스트뷰를 사용하고 있는 XML 코드의 태그를 Button
으로만 변경해줄 경우 바로 사용할 수 있다. 체크박스
, 라디오 버튼
등의 경우에는 버튼의 속성을 그대로 상속받아 정의되어 있어 모두 태그를 변경하는 것만으로 편리하게 사용할 수 있다.
여러가지 버튼 계열 위젯 중에서 버튼
이 가장 단순한 형태의 기본 위젯이다. 해당 버튼에 클릭
이 발생할 경우 이벤트를 처리하기 위해서는 OnClickListner
속성에 이벤트 처리함수를 등록해야 한다.
체크박스와 라디오버튼의 경우 일반적인 버튼과 다르게 현재 상태를 저장하고 해당 아이템이 선택/해제 되어있는지 여부를 표시하게 된다. 이를 위해 필요한 기능들을 정의한 클래스가 CompoundButton
클래스이다. 기본적인 버튼의 기능 외에 아래의 메소드들이 정의되어 있다.
public boolean isChecked ();
public void setChecked (boolean checked);
public void toggle ();
void onCheckedChanged(CompoundButton buttonView, boolean isCheckd);
이름에서 유추할 수 있듯이 isChecked ()
메소드를 통해 체크 박스 혹은 라디오 버튼이 선택되어 있는지를 확인할 수 있고, setChecked ()
메소드를 통해 상태값을 지정할 수 있다. 체크된 상태가 변경될 경우에는 onCheckedChanged ()
메소드가 자동으로 호출되어 후작업을 하게 된다.
onCheckedChanged ()
메소드에 실제 동작을 추가하기 위해서는 setOnCheckedChangeListener ()
메소드를 통해 OnCheckedChangeListener
인터페이스를 구현하여 추가하면 된다.
라디오 버튼은 일반 체크박스와 다르게, 하나의 아이템이 선택될 경우 다른 아이템의 체크 상태를 해제 해야 하므로 RadioGroup
태그를 통해 하나의 그룹으로 묶어서 사용한다. 하나의 RadioGroup
안에 정의되어 있는 RadioButton
은 모두 같은 그룹으로 인식된다.
RadioButton
은 체크박스와 동일한 메소드를 가지고 있으며 라디오버튼을 하나의 그룹으로 묶어주는 RadioGroup
클래스는 아래의 메소드들을 포함하고 있다.
void check (int id);
void clearCheck ();
check ()
메소드는 해당 라디오 그룹에 포함되어 있는 라디오 버튼중 체크하길 원하는 버튼의 아이디를 전달하여, 해당 버튼을 체크하도록 하는 기능을 가지고 있다. check ()
메소드에 -1
값을 전달할 경우 모든 버튼이 체크 해제가 된다.
clearCheck ()
메소드는 이름에서 유추할 수 있듯이 체크된 라디오 버튼들의 상태를 모두 해제한다.
예제
언제나와 같이 예제 코드와 실행 화면을 첨부한다. 이번 글의 예제는 java코드의 변경 없이 xml 코드만 변경하였다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="선택 버튼"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="선택1"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="선택2"/>
</RadioGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="선택완료"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="false" />
</LinearLayout>
</LinearLayout>
