[안드로이드프로그래밍6판] 4장 실습 4-2, 직접 풀어보기 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" />
<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);