728x90
반응형
1. 실습 7-3
실행 화면
초기 | 대화상자 입력창 | 확인 눌렀을 때 | 취소 눌렀을 때 Toast |
![]() |
![]() |
![]() |
![]() |
1) xml 코드(단순하므로 모두 접은 글로 표시)
<activity_main.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:id="@+id/tvName"
android:text="사용자 이름"
android:textSize="25dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tvEmail"
android:text="이메일"
android:textSize="25dp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn1"
android:text="여기를 클릭"
android:textSize="25dp"
android:layout_gravity="center"
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:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="사용자 이름"
android:textSize="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/digEdt1"
android:textSize="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:text="이메일"
android:textSize="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/digEdt2"
android:textSize="25dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<toast1.xml>
더보기
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent" android:gravity="center"
android:background="#ff0000">
<ImageView
android:src="@android:drawable/btn_star_big_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/toastT"
android:text="TextView"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:src="@android:drawable/btn_star_big_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
2) java 코드
package com.cookandroid.practice7_3;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btn1;
TextView tvName, tvEmail, ToastT;
EditText digEdt1, digEdt2;
//각각 대화상자와 토스트에 사용할 커스텀 뷰
View dialogView, toastView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("사용자 정보 입력");
btn1 = findViewById(R.id.btn1);
tvName = findViewById(R.id.tvName);
tvEmail = findViewById(R.id.tvEmail);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogView = View.inflate(MainActivity.this, R.layout.dialog1, null);
AlertDialog.Builder dig = new AlertDialog.Builder(MainActivity.this);
dig.setTitle("사용자 정보 입력");
dig.setIcon(R.drawable.ic_menu_allfriends);
dig.setView(dialogView);
//취소 버튼 눌렀을 때, 토스트 연결
dig.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast toast = new Toast(MainActivity.this);
toastView = View.inflate(MainActivity.this, R.layout.toast1, null);
ToastT = toastView.findViewById(R.id.toastT);
ToastT.setText("취소했습니다.");
toast.setView(toastView);
toast.show();
}
});
//확인 버튼 눌렀을 때, 정보 입력
dig.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
digEdt1 = dialogView.findViewById(R.id.digEdt1);
digEdt2 = dialogView.findViewById(R.id.digEdt2);
tvName.setText(digEdt1.getText().toString());
tvEmail.setText(digEdt2.getText().toString());
}
});
dig.show();
}
});
}
}
a. 커스텀뷰 연결시키는 부분 유의!
b. 대화상자, 기본적 코드형태 있음.
- 버튼 클릭 리스너() {
public void onClick(View v) {
AlertDialog.Builder dig = new AlertDialog.Builder(액티비티명.this); //보통 Mainactivity
dig.setTitle("창 제목");
dig.setMessage("내용"); // 이 부분이 setView(연결시킬 커스텀뷰); 로 바뀌기도 함.
dig.setIcon(R.drawble.~); // 창의 아이콘
dig.show(); ▶ 누락 쉬움!! 특히 확인, 취소 버튼에 메서드 넣으면 길어져서 안 보일 수 있음.
미리 간략 작성 후, 확인-취소 버튼 내용 작성하면 좋을 듯.
}
2. 직접 풀어보기 7-3
1) activity_main.xml 의 변화 : TextView를 모두 EditText로 바꿈.
2) Main.java의 변화
a. 초기 화면의 입력 값 ▶ 버튼 클릭시 뜨는 대화창에 기록
b. 대화창에서 수정한 값 ▶ 초기 메인화면에 반영
c. 토스트, 랜덤 위치에 발생 - 상당히 어려움. 그냥 보고 베낌.
package com.cookandroid.practice7_3;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Display;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
Button btn1;
TextView ToastT;
EditText etName, etEmail, digEdt1, digEdt2;
//각각 대화상자와 토스트에 사용할 커스텀 뷰
View dialogView, toastView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("사용자 정보 입력");
btn1 = findViewById(R.id.btn1);
etName = findViewById(R.id.etName);
etEmail = findViewById(R.id.etEmail);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogView = View.inflate(MainActivity.this, R.layout.dialog1, null);
AlertDialog.Builder dig = new AlertDialog.Builder(MainActivity.this);
dig.setTitle("사용자 정보 입력");
dig.setIcon(R.drawable.ic_menu_allfriends);
dig.setView(dialogView);
//여기 바뀜!!!! 초기 화면 입력값 반영위해 여기서 값 찾음.
digEdt1 = dialogView.findViewById(R.id.digEdt1);
digEdt2 = dialogView.findViewById(R.id.digEdt2);
digEdt1.setText(etName.getText());
digEdt2.setText(etEmail.getText());
//취소 버튼 눌렀을 때, 토스트 연결
dig.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast toast = new Toast(MainActivity.this);
toastView = View.inflate(MainActivity.this, R.layout.toast1, null);
ToastT = toastView.findViewById(R.id.toastT);
ToastT.setText("취소했습니다.");
toast.setView(toastView);
//여기 바뀜!!!! 토스트 랜덤
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int xOffset = (int) (Math.random()*display.getWidth());
int yOffset = (int) (Math.random()*display.getHeight());
toast.setGravity(Gravity.TOP | Gravity.LEFT, xOffset, yOffset);
toast.show();
}
});
//확인 버튼 눌렀을 때, 정보 입력
dig.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
etName.setText(digEdt1.getText());
etEmail.setText(digEdt2.getText());
}
});
dig.show();
}
});
}
}
'모바일 > android' 카테고리의 다른 글
[안드로이드프로그래밍6판] 그림판 응용 (0) | 2021.12.15 |
---|---|
[안드로이드프로그래밍6판] 직접 풀어보기 9-1, 9-2, 실습 9-1 (0) | 2021.12.15 |
[안드로이드프로그래밍6판] (컨텍스트 메뉴) 실습 7-2, 직접 풀어보기 7-2 (0) | 2021.10.22 |
[안드로이드프로그래밍6판] (옵션 메뉴)실습 7-1 고대로 베낌, 직접 풀어보기 7-1 (0) | 2021.10.22 |
[안드로이드프로그래밍6판] 6장 직접 풀어보기 6-2, 직접 풀어보기 6-3, 실습 6-2 / 뷰플리퍼, 탭호스트 (0) | 2021.10.18 |