728x90
반응형
대화 상자(dialog)
1) 사용자에게 메시지를 출력하고 사용자로부터 입력을 받아들이는 아주 보편적인 UI임
2) 종류
- AlertDialog
- 구성
- 제목
- 콘텐츠 영역(메시지, 리스트, 커스텀 레이아웃 표시)
- 액션 버튼(3개 이내의 버튼 - ok, cancel)
- 생성
- AlertDialog.Builder 클래스로 생성
- DatePickerDialog
- TimePickerDialog
activity_main.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="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvName"
android:hint="사용자 이름"
android:textSize="20dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tvEmail"
android:hint="이메일"
android:textSize="20dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:hint="여기를 클릭하세요."/>
</LinearLayout>
<dialog.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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="사용자 이름"
android:textSize="20dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dlgEdt1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이메일"
android:textSize="20dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dlgEdt2"/>
</LinearLayout>
<toast.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:background="#ff0000"
android:gravity="center">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView1"
android:src="@drawable/btn_star_big_on"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/toastText"
android:text="TextView.."
android:textSize="20dp"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView2"
android:src="@drawable/btn_star_big_on"/>
</LinearLayout>
<MainActivity.java>
package kr.co.alertdialog;
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 {
TextView tvName, tvEmail;
Button button;
EditText dlgEdtName, dlgEdtEmail;
TextView toastText;
View dialogView, toastView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);
setTitle("사용자 정보 입력(수정)");
tvName = findViewById(R.id.tvName);
tvEmail = findViewById(R.id.tvEmail);
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialogView = View.inflate(MainActivity.this, R.layout.dialog, null);
//대화상자 생성(빌더 객체 생성)
AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
//용도에 따른 설정
dlg.setTitle("사용자 정보 입력"); //제목 설정
dlg.setIcon(R.drawable.ic_menu_allfriends); //아이콘 설정
dlg.setView(dialogView);
dlgEdtName = dialogView.findViewById(R.id.dlgEdt1);
dlgEdtEmail = dialogView.findViewById(R.id.dlgEdt2);
dlgEdtName.setText(tvName.getText().toString());
dlgEdtEmail.setText(tvEmail.getText().toString());
//대화상자의 'OK' 버튼 부분 설정
dlg.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
tvName.setText(dlgEdtName.getText().toString());
tvEmail.setText(dlgEdtEmail.getText().toString());
}
});
//대화상자의 'Cancel' 버튼 부분 설정
dlg.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast toast = new Toast(MainActivity.this);
//토스트가 화면의 임의 위치에 나타내기 위해서임
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);
toastView = View.inflate(MainActivity.this, R.layout.toast, null);
toastText = toastView.findViewById(R.id.toastText);
toastText.setText("취소했습니다!");
toast.setView(toastView);
toast.show();
}
});
dlg.show();
}
});
}
}
728x90
반응형
'App > Android Java' 카테고리의 다른 글
Android_Java(15) - FileExternalApp (0) | 2022.02.10 |
---|---|
Android_Java(14) - FileApp (0) | 2022.02.09 |
Android_java(12) - OptionMenuApp (0) | 2022.02.09 |
Android_java(11) - TabHost (0) | 2022.02.08 |
Android_Java(10) -VeiwFlipperApp (0) | 2022.02.08 |
댓글