Android - RadioButton ( 라디오 버튼 )

Android 2011.10.05 20:01

라디오 버튼을 사용하여서 배경색을 바꾸는 것을 살펴보겠습니다.
선택하는 버튼에는 체크와 라디오가 있습니다.

두가지의 차이는 하나를 선택하느냐와 여러개를 선택하느냐에 있습니다.
체크는 중복으로 라디오는 한가지만 선택하는 상황에 쓰입니다.

여기서는 라디오버튼에 대해서 살펴보겠습니다.
하나씩 라디오버튼을 사용해서 UI를 구성할 수 있지만 그래도 그중에 한가지만 선택하게 할려면
그룹으로 묶어줘야합니다.
그래서 예초에 라디오 그룹 도구를 사용해서 UI를 구성해줍니다.

라디오 그룹을 생성해주면 다음과 같이 라디오그룹1 안에 라디오버튼 3개가 생기는 것을 볼 수 있는데요.
안에 있는 라디오버튼의 갯수를 사용자 마음대로 구성하여도 무관합니다.
중요한 것은 하나의 그룹으로 묶어주는게 좋다는 겁니다.

RadioGroup rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
rg1.setOnCheckedChangeListener(this);

버튼과 마찬가지로 이벤트처리를 해주어야 하는데요 이 구문은 라디오버튼이 선택했을 때의
이벤트처리 구문입니다.
당연히 체크이벤트를 위해 그에 맞는 인터페이스를 implements 해주셔야 합니다.
extends 는 클래스간의 1:1 상속이지만 implements는 필요한 인터페이스를 여러개 상속을 받을 수 있습니다.

두가지를 설명하자면
class A extends B 라고 하면 A는 B라는 클래스를 상속 받아서 +a 시키겠다는 뜻이구요
class A implements C 라고 하면 A는 C라는 인터페이스를 구현하겠다~ 라는 뜻입니다.
무슨 말이냐면 쉽게 얘기하자면 extends는 저와 부모님의 관계 이고, implements는 저와 선생님의 관계라고 생각하시면 되겠네요.
저와 부모님은 하나의 관계이지만 선생님과의 관계는 여러관계죠 이렇게 이해해주세요 !

그래서 버튼의 setOnClickListener();와 라디오버튼의 setOnCheckedChangeListener(); 동시에 두가지를 상속받을 수 있습니다.
물론 체크박스의 인터페이스도 상속받을 수 있겠죠.

setOnCheckedChangeListener(); 인터페이스를 받으면 하나의 메서드가 생기는데
버튼과 마찬가지로 제어문으로 분기하셔서 사용하시면 됩니다.

그러면 라디오버튼을 이용해여 배경화면 색상을 변경하는 것을 실습해보겠습니다.


프로젝트 생성

Project name : ExamRadioButton
Build Target : Android 2.1
Package name : jsh.exam.radio
Create Activity : main
Min SDK Version : 7


Java

main.java

package jsh.exam.radio;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class main extends Activity implements
  RadioGroup.OnCheckedChangeListener {
 /** Called when the activity is first created. */

 LinearLayout ll;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  ll = (LinearLayout) findViewById(R.id.linearLayout1);

  RadioGroup rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
  rg1.setOnCheckedChangeListener(this);

 }

 @Override
 public void onCheckedChanged(RadioGroup arg0, int arg1) {
  // TODO Auto-generated method stub

  switch (arg1) {

  case R.id.radio0:

   ll.setBackgroundColor(Color.WHITE);

   break;

  case R.id.radio1:

   ll.setBackgroundColor(Color.RED);

   break;

  case R.id.radio2:

   ll.setBackgroundColor(Color.BLUE);

   break;

  }
 }
}


XML

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="
http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="horizontal">
 <LinearLayout
  android:layout_height="fill_parent"
  android:id="@+id/linearLayout1"
  android:orientation="horizontal"
  android:layout_width="fill_parent">
  <RadioGroup
   android:layout_height="wrap_content"
   android:layout_width="wrap_content"
   android:id="@+id/radioGroup1">
   <RadioButton
    android:text="하양"
    android:layout_width="wrap_content"
    android:id="@+id/radio0"
    android:checked="true"
    android:layout_height="wrap_content"></RadioButton>
   <RadioButton
    android:text="빨강"
    android:layout_width="wrap_content"
    android:id="@+id/radio1"
    android:layout_height="wrap_content"></RadioButton>
   <RadioButton
    android:text="블루"
    android:layout_width="wrap_content"
    android:id="@+id/radio2"
    android:layout_height="wrap_content"></RadioButton>
  </RadioGroup>
 </LinearLayout>
</LinearLayout>

실행화면



실행결과로써 라디오버튼이 하나씩만 선택 되는 것을 확인하실 수 있구요
해당 버튼을 누름에 따라 배경색이 바뀌는 것을 알 수 있습니다.
하지만 처음상태의 화면에서 하양에 선택이 되있지만 실행이 안되있는 것을 볼 수 있는데요
그것은 실행할 때 하나의 버튼은 선택되어 있어야 하지만 그것을 지정을 안해줘서 제일 처음 라디오버튼에
선택이 되어 있는 것입니다. 그래서 선택이 되어있어도 그에 따른 이벤트는 일어나지 않는 것입니다.

그것을 막기 위해서

변수명.check(id);
구문을 사용하여서
지정된 id값을 가진 라디오버튼을 선택하면서 실행하게합니다.

여기까지 라디오버튼을 사용하는 방법을 살펴보았습니다.
다른 궁금한 사항은 댓글로 남겨주세요.

 

 


 

저작자 표시
신고
Trackback 0 : Comments 5
  1. 2011.11.05 06:51 Modify/Delete Reply

    비밀댓글입니다

    • 정승현 2011.11.07 16:59 신고 Modify/Delete

      게임쪽은 제가 좀 어렵겠는데요.
      일단은 무엇인지 방명록에 남겨주시면
      제가 아는 분야이면
      알려드리겠습니다.

  2. Jhon Kim 2011.12.30 02:36 신고 Modify/Delete Reply

    참으로 많이 알고 계시군요..
    지금 그대로 하고있어요, 잘되가고 있습니다
    Thankyou SOOOOOO mouch

  3. jun 2012.04.07 22:39 신고 Modify/Delete Reply

    안녕하세요 게시글 잘보고 구독 잘찍었습니다 ^^
    제가 이거 구동해보려고 이름과 패키지네임까지 똑같이하고
    자바소스 붙여넣기 , xml소스 붙여넣기했는데
    오류가떳어요 ㅜㅜ 그리고 오류 고쳐서 실행해보니까 unfortunatly stopped라고뜨는데
    어떻게해야지 구동시킬수있죠???

  4. 잡동사니주인 2013.04.08 23:32 신고 Modify/Delete Reply

    혹시 찾으시는 분들이 게실까봐 함 수정했는데 똑같이는 안되내요 어찌됬든 전 실행이 목표니까요 ㅎㅎ 고맙습니다.

    package kr.co.company.radiobutton;

    import android.app.Activity;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.widget.LinearLayout;
    import android.widget.RadioGroup;

    public class MainActivity extends Activity implements
    RadioGroup.OnCheckedChangeListener {
    LinearLayout ll;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    ll = (LinearLayout) findViewById(R.id.radioGroup1);
    RadioGroup rg1 = (RadioGroup) findViewById(R.id.radioGroup1);
    rg1.setOnCheckedChangeListener(this);
    }

    @Override
    public void onCheckedChanged(RadioGroup arg0, int arg1) {
    // TODO Auto-generated method stub
    switch (arg1) {
    case R.id.radio0:
    ll.setBackgroundColor(Color.RED);
    break;
    case R.id.radio1:
    ll.setBackgroundColor(Color.BLUE);
    break;
    case R.id.radio2:
    ll.setBackgroundColor(Color.GREEN);
    break;
    }
    }
    }

Write a comment