모바일/android

[안드로이드프로그래밍6판] 4장 실습 4-2, 직접 풀어보기 4-4

hatch 2021. 10. 16. 01:03
728x90
반응형

정답지 아닙니다.

블로그 주인이 작성한 답안으로

오류, 오타 있을 수 있습니다!

(댓글로 말씀해주시면 정정하겠습니다.)

 

 

실습 4-2, 애완동물 사진보기

 

<xml 코드>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:text="선택을 시작하겠습니까?"
        android:textSize="20dp"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <CheckBox
        android:id="@+id/Start"
        android:text="시작함"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/Like"
        android:text="좋아하는 애완동물은?"
        android:textSize="20dp"
        android:layout_margin="10dp"
        android:visibility="invisible"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RadioGroup
        android:id="@+id/AnimalGroup"
        android:visibility="invisible"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:id="@+id/Dog"
            android:text="강아지"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <RadioButton
            android:id="@+id/Cat"
            android:text="고양이"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <RadioButton
            android:id="@+id/Rabbit"
            android:text="토끼"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </RadioGroup>

    <Button
        android:id="@+id/Btn"
        android:visibility="invisible"
        android:layout_margin="10dp"
        android:text="선택 완료"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/Img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

<java 코드>

package com.cookandroid.practice4_2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView like;
    CheckBox start;
    RadioGroup animalGroup;
    RadioButton dog, cat, rabbit;
    Button btn;
    ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("애완동물 사진 보기");

        like = findViewById(R.id.Like);
        start = findViewById(R.id.Start);
        animalGroup = findViewById(R.id.AnimalGroup);
        btn = findViewById(R.id.Btn);
        img = findViewById(R.id.Img);

        start.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                like.setVisibility(View.VISIBLE);
                animalGroup.setVisibility(View.VISIBLE);
                btn.setVisibility(View.VISIBLE);
            }
        });
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                switch (animalGroup.getCheckedRadioButtonId()) {
                    case R.id.Dog:
                        img.setImageResource(R.drawable.dog);
                        break;
                    case R.id.Cat:
                        img.setImageResource(R.drawable.cat);
                        break;
                    case R.id.Rabbit:
                        img.setImageResource(R.drawable.rabbit);
                        break;
                }
            }

        });
    }
}

▶ 복습 개념

- visibility : xml에서 이미 초기 설정되어 있어야 함.

(자바 선언) 변수.setVisibility(View.VISIBLE); - - - - - 알고보면, (android.view.View.VISIBLE);

 

누르면 변화하는 리스너

- button : setOnClickListener(new View.OnClickListener)

- checkbox, radiobutton : setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener())

** 컴파운드버튼 클래스 하위 클래스

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

 

 

 

직접 풀어보기 4-4(실습 4-2 응용)

 

<xml 코드>

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:text="선택을 시작하겠습니까?"
        android:textSize="20dp"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Switch
        android:id="@+id/Start"
        android:text="시작함"
        android:layout_margin="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/Like"
        android:text="좋아하는 안드로이드 버전은?"
        android:textSize="20dp"
        android:layout_margin="10dp"
        android:visibility="invisible"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RadioGroup
        android:id="@+id/Version"
        android:visibility="invisible"
        android:layout_margin="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RadioButton
            android:id="@+id/Pie"
            android:text="파이(9.0)"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <RadioButton
            android:id="@+id/Q"
            android:text="Q(10.0)"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <RadioButton
            android:id="@+id/R"
            android:text="R(11.0)"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </RadioGroup>
    <ImageView
        android:id="@+id/Img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/Btnend"
        android:visibility="invisible"
        android:layout_margin="10dp"
        android:text="종료"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        android:id="@+id/Btnre"
        android:visibility="invisible"
        android:layout_margin="10dp"
        android:text="처음으로"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

<java 코드>

package com.cookandroid.myself4_4;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Switch;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView like;
    Switch start;
    RadioGroup version;
    RadioButton pie, q, r;
    Button btnend, btnre;
    ImageView img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("안드로이드 사진 보기");

        like = findViewById(R.id.Like);
        start = findViewById(R.id.Start);
        version = findViewById(R.id.Version);
        btnend = findViewById(R.id.Btnend);
        btnre = findViewById(R.id.Btnre);
        img = findViewById(R.id.Img);

        start.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if (b) {
                    like.setVisibility(View.VISIBLE);
                    version.setVisibility(View.VISIBLE);
                    img.setVisibility(View.VISIBLE);
                    btnend.setVisibility(View.VISIBLE);
                    btnre.setVisibility(View.VISIBLE);
                } else {
                    like.setVisibility(View.INVISIBLE);
                    version.setVisibility(View.INVISIBLE);
                    btnend.setVisibility(View.INVISIBLE);
                    btnre.setVisibility(View.INVISIBLE);
                    img.setVisibility(View.INVISIBLE);
                }
            }
        });

        version.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
               switch (version.getCheckedRadioButtonId()) {
                   case R.id.Pie:
                       img.setImageResource(R.drawable.pie);
                       break;
                   case R.id.Q:
                       img.setImageResource(R.drawable.q10);
                       break;
                   case R.id.R:
                       img.setImageResource(R.drawable.r11);
                       break;
               }
            }
        });

        btnend.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        btnre.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                start.setChecked(false);
            }
        });


    };
}

▶ 복습 개념

- 라디오버튼 누르면 사진나오는 리스너

(라디오그룹명).setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() ...

                                                                                   ** CompoundButton아님!!

>> 스위치문으로 작성.

switch ((라디오그룹명).getCheckedRadioButtonId()) { case R.id.(라디오버튼id): ~}

** id 검색해서 불러오므로, switch 변수명 부분도 "~RadioButoonId()"

 

- 스위치 누르면 초기화

(스위치명).setChecked(false);