Programming Language/Android Programming

체크박스, 스위치, 토글, 라디오

D4tai1 2018. 9. 4.

1. LinearLayout

1) Component Tree

 [1] 사용할 플랫리스트

 

  - CheckBox = 프로그램 이름

  - Switch = 클릭 시 키고 끄기

  - ToggleButton = 클릭 시 변화

  - RadioGroup = 라디오를 묶는 그룹

  - RadioButton = 라디오 버튼

 

 [2] LinearLayout의 속성

 

 

2. 각 플랫의 속성

1) CheckBox

 

 - 가장 왼쪽 안드로이드폰만 checked에 체크가 되어있다.

 - checked는 시작 시 체크가 된 상태이다.

2) Switch

 

 - textOn에 ON, textOff에 OFF를 적어 ON시 불이 들어오는 것을 확인한다.  

 

3) ToggleButton

 

 - 클릭 시 On, Off 바뀌는 것을 확인 할 수가 있다.

 

4) RadioGroup, RadioButton

  

 - "남자와 여자" 처럼 중복이 불가능 한 곳에

 여러 개의 RadioButton을 하나의 RadioGroup으로 묶어서 사용한다.

 

3. 내부구현

- 버튼을 클릭 시 동작을 해야하기 때문에

[설치폴더]\app\java\com.example.d4tai1.pro20180903A_2[설치 시 설정한 각자의 도메인]\MainActivity.java 에 구현

 

1) 구현 소스

package com.example.d4tai1.pro20180903a_2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.RadioGroup;
import android.widget.RadioButton;

public class MainActivity extends AppCompatActivity {
    CheckBox chkAndroid, chkIPhone, chkWinPhone;

    RadioGroup rdoGroup1;
    RadioButton rdoMan, rdoWoman;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        chkWinPhone = (CheckBox)findViewById(R.id.chkIPhone);
        chkAndroid = (CheckBox)findViewById(R.id.chkAndroid);
        chkIPhone = (CheckBox)findViewById(R.id.chkIPhone);


        rdoGroup1 = (RadioGroup)findViewById(R.id.rGroup1);

        //R Class 속에 들어있는 id의 값은 integer 타입이다.

        rdoGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (group.getCheckedRadioButtonId()) {
                    //라디오그룹의 버튼중에서 체크한 것이 넘어간다.
                    case R.id.rdoMan:
                        Toast.makeText(getApplicationContext(), "남성!", Toast.LENGTH_SHORT).show();
                        //Toast 메소드는 static 메소드이다.
                        break;

                    case R.id.rdoWoman:
                        Toast.makeText(getApplicationContext(), "여성!", Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        });

        chkIPhone.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            //클릭도 되고, 터치도 될 것 같지만 체크드가 정확히 돌아간다.
            //즉 이벤트리스너를 사용할 때 정확하게 사용하여야 한다.
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (chkIPhone.isChecked()) { //아이폰이 체크되어 있으면?
                    Toast.makeText(getApplicationContext(), "체크됨(터치)!", Toast.LENGTH_SHORT).show();
                    //Toast는 static 메소드이기 때문에 new하지 않는다.
                }
            }
        });

        chkIPhone.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (chkIPhone.isChecked()) { //아이폰이 체크되어 있으면?
                    Toast.makeText(getApplicationContext(), "체크됨(터치)!", Toast.LENGTH_SHORT).show();
                    //Toast는 static 메소드이기 때문에 new하지 않는다.
                }
                return false;
            }
        });

    }
}

 

 - 실제로 setOnTouch... 메소드나 setOnClick... 메소드는 터치나 클릭 시 구현될 것 같지만

 위와 같이 돌아가지 않는 것을 알 수 있고 그래서 setOnChecked... 메소드 내부에 구현했다.

 

4. 시연

  - 여자라디오를 클릭 시 MainActivity.java에서 서술한 "여성!" 이라는

  Toast가 show()됨을 알 수 있다.

  - 이 외에도 위에서 서술한 아이폰도 클릭 시 "체크됨(터치)!" 가 보여진다.

  - 안드로이드폰은 처음부터 checked에 체크했기 때문에 시작시에 체크가 되어있다.

'Programming Language > Android Programming' 카테고리의 다른 글

메뉴버튼  (0) 2018.10.09
계산기, 예약  (0) 2018.09.18
레이아웃  (0) 2018.09.14
계산기  (0) 2018.09.03
프로그램 설치 및 기본 사용법  (0) 2018.08.28

댓글