이과/JAVA 안드로이드

[안드로이드]CompoundButton 활용

코딩초밥 2021. 4. 25. 15:31
반응형

안녕하세요 ㅇㅅㅇ 코딩초밥입니다.

요번에는 어플에서 체크 리스트나 선택한 값을 가져오기 위한

compound button 들을을 만든후 그에 따른 활용에 관한 글을 써보겠습니다.

xml에서는 LinearLayout을 사용하였습니다.

xml쪽에서 아래에 같은 코드를 넣어주시면

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity"
    android:layout_margin="15dp">

    <CheckBox
        android:id="@+id/cb01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Apple"/>
    <CheckBox
        android:id="@+id/cb02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Banana"/>
    <CheckBox
        android:id="@+id/cb03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Orange"/>



    <ToggleButton
        android:id="@+id/toggle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff="꺼짐"
        android:textOn="켜짐"/>

    <Switch
        android:id="@+id/sw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sound"/>

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="result"
        android:textStyle="bold"
        android:textSize="30sp"
        android:textColor="#000000"/>


</LinearLayout>

위에코드를 사용을하면 옆에 보이는 checkbox 3개와

togglebutton 한개 switch 버튼까지 가져올수있습니다.

인제 이 버튼들을 눌러서 각 과일의 이름을

result칸에 띄워보도록하겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

* 이 글은 코딩 고수들이 보는 글이아닐꺼라 생각이 들어서 코딩 한줄한줄에 모두 설명을 달아놨습니다. 자 저는 주석요정이 되어서 코딩안에서 설명 해보겠습니다

 

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {

    //xml에서 만들 뷰들을 참조하는 참조변수를 먼저 만들어줍니다
    //onCreate 전에 이렇게 변수로 선언를 해주셔야하는데
    // 이렇게 해놔야 어디서든 자신이 사용한 코드안에서 어디서든사용가능합니다.

    private CheckBox cb01, cb02, cb03; //cd01,cd02등 이것은 제마음대로 쓸수있습니다!
     //무조건 이걸써야하는것이아닙니다. 자유롭지만 관련있는 작명을해봅시다.
    private TextView tv;
    private ToggleButton toggleButton;
    private Switch sw;

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

        // xml에서 같이 id를 만들었었죠? xml과 연결해봅시당 findviewById로
        // '이 변수는 xml에서 이것을 뜻하는것입니다~~' 하는 뜻이에용
        // id를 이용해서 뷰들을 찾아와서 참조변수에 대입!
        cb01= findViewById(R.id.cb01);
        cb02= findViewById(R.id.cb02);
        cb03= findViewById(R.id.cb03);
        tv= findViewById(R.id.tv);


        //체크박스의 체크상태가 변경되는 것을 듣는 리스너객체 생성. 코드쓰시다보면 자동완성 될겁니다! 길다고겁내지말기!
        CompoundButton.OnCheckedChangeListener changeListener= new CompoundButton.OnCheckedChangeListener() {
            //체크상태가 변경될 때 마다 실행되는 메소드
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                //저희가 썼던 과일 이름을 가져온다는 뜻입니다.
                String s=""; //문자열을 저장하는 String 변수값을 가져와 s안에 값을 저장해봅시다!
                if( cb01.isChecked()) s += cb01.getText().toString(); 
                if( cb02.isChecked()) s += cb02.getText().toString();
                if( cb03.isChecked()) s += cb03.getText().toString();
                //if는 만약에라는 뜻으로 만약 cd01이눌러졌다면! s에 값을 담아라!라는뜻이에요

                tv.setText(s); //담기만하면 안되겠죠? textview의 아이디 tv에 그 값을 담아줍니다.

            }
        };
        //위에 만든건 공용이라 생각하시고 위에서 만든 리스너객체를 각 체크박스에 붙이기!
        cb01.setOnCheckedChangeListener(changeListener);
        cb02.setOnCheckedChangeListener(changeListener);
        cb03.setOnCheckedChangeListener(changeListener);


        //토글버튼의 체크상태변경 리스너 생성 해봅시다 토글버튼은 on off를 나타내는 버튼말하는겁니다!
        toggleButton= findViewById(R.id.toggle); //아이디를 가져와야 xml이 연결이되겠죠?
        toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                tv.setText( isChecked + "" ); // 눌러서 끌것인가 킬것인가를 설정할수있는 Listener입니다
            }
        });



        //Switch에 체크상태변경 리스너 객체 생성 및 설정
        sw= findViewById(R.id.sw); //슬라이드 하는거있죠? 그거 말하는거에요 바로그거 on off
        sw.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                tv.setText( isChecked +""); //슬라이드해서 글을 넣을껏인가 뺄것인가하는 Listener입니다
            }
        });
    }
}

처음으로 android를 다루시는분들은 복사 붙이기말고 한번 써보시는걸 권장드려요

연습도 연습이지만..가끔 영어울렁증에 코드도 길어 보여서 거부감을 느끼시는분이 계셔서

자동완성으로 금방 완성되는 코딩과 놀아보시길바랍니다.

반응형