Android, IOS/Android

[Android Sutdio를 활용한 안드로이드 프로그래밍 개정 5판] 연습문제 7-6

Emil :) 2019. 11. 9. 15:02
728x90
반응형

문제


  • 초기화면에서 라디오버튼으로 네 가지 동물 이름을 선택할 수 있고, <그림보기>를 클릭하면 그림이 대화상자로 나오는 프로젝트를 작성하시오.

결과 화면


XML 코드


<activity_main.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:orientation="vertical"
    tools:context=".MainActivity">

    <RadioGroup
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/imgDog"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="강아지"/>
        <RadioButton
            android:id="@+id/imgCat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="고양이"/>
        <RadioButton
            android:id="@+id/imgRabbit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="토끼"/>
        <RadioButton
            android:id="@+id/imgHorse"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="말"/>
    </RadioGroup>
    <Button
        android:id="@+id/btnConfirm"
        android:text="그림보기"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

<dialog1.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:gravity="center_vertical"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/imageView1"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>

JAVA 코드


<MainActivity.java>

package com.example.homework3;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;

public class MainActivity extends AppCompatActivity {

    Button btnConfirm;
    RadioButton rdoCat, rdoDog, rdoRabbit, rdoHorse;
    ImageView imageView1;
    View dialogView;

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

        btnConfirm = findViewById(R.id.btnConfirm);
        rdoCat = findViewById(R.id.imgCat);
        rdoDog = findViewById(R.id.imgDog);
        rdoRabbit = findViewById(R.id.imgRabbit);
        rdoHorse = findViewById(R.id.imgHorse);

        btnConfirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogView = View.inflate(MainActivity.this, R.layout.dialog1, null);
                AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);

                imageView1 = dialogView.findViewById(R.id.imageView1); //여기가 핵심, dialogView라고 안하면 메인XML파일에서 imageView1을 찾기때문에 에러가났다
                dlg.setView(dialogView);

                if(rdoCat.isChecked()){
                    imageView1.setImageResource(R.drawable.cat);
                    dlg.setTitle("고양이");
                } else if(rdoDog.isChecked()){
                    imageView1.setImageResource(R.drawable.dog);
                    dlg.setTitle("강아지");
                } else if(rdoRabbit.isChecked()){
                    imageView1.setImageResource(R.drawable.rabbit);
                    dlg.setTitle("토끼");
                } else if(rdoHorse.isChecked()){
                    imageView1.setImageResource(R.drawable.horse);
                    dlg.setTitle("말");
                }
                dlg.setNegativeButton("닫기",null);
                dlg.show();
            }
        });

    }
}

 

결과


 

하다보니 라디오버튼에 일일이 변수 할당해주는거 말고, 라디오그룹으로 묶어서 getCheckedRadioButtonId() 메소드로
case문 돌리면 더 깔끔해 보인다는걸 알았다.

 

728x90
반응형