반응형
Ex14AlertDialog
안드로이드 네이티브 앱 개발 수업 예제#14
주요코드
AlertDialog 객체 생성 및 보이기와 여러종류의 AlertDialog 알아보기
- 버튼을 클릭하여 기본적인 String메세지를 보여주는 Alert 객체 생성 및 보이기 [AlertDialog를 만들어주는 건축가(Builder)객체 생성]
- 여러모양의 AlertDialog 만들기
- 단순 string 문자열 보여주기
- AlertDialog의 메세지 영역에 단순 문자열이 아닌 항목(list)형태로 메세지영역 설정해 보기
- 라디오버튼이 있는 항목형태의 설정해 보기
- 체크박스버튼이 있는 리스트형태의 설정
- 커스텀뷰로 메세지영역 설정하기
실행모습
여러모양의 AlertDialog
소스코드
# 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="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
tools:context=".MainActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Show AlertDialog"
android:textAllCaps="false"
android:onClick="clickBtn"/>
</LinearLayout>
# MainActivity.java |
import androidx.appcompat.app.AppCompatActivity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//2.2~ 실습) 리스트형태의 AlertDialog 실습때 사용할 String배열 멤버변수
String[] items= new String[]{"Apple", "Banana", "Orange"};
//2.4 실습) 체크박스를 가진 리스트형태의 AlertDialog 실습때 사용할 boolean 배열 멤버변수
boolean[] checked= new boolean[]{true, false, true};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void clickBtn(View v){
//AlertDialog를 만들어주는 건축가(Builder)객체 생성
AlertDialog.Builder builder= new AlertDialog.Builder(this);
//1. 건축가객체(Builder)에게 만들고자하는 AlertDialog의 제목과 아이콘을 설정
builder.setTitle("다이얼로그");
builder.setIcon(android.R.drawable.ic_dialog_alert);
//2. 만들고자하는 AlertDialog의 메세지를 설정
// builder.setMessage("Do you wanna Quit??");
//2.2) AlertDialog의 메세지 영역에 단순 문자열이 아닌 항목(list)형태로 메세지영역 설정해 보기
// builder.setItems(items, new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialogInterface, int which) {
// Toast t= Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT);
// t.show();
// }
// });
//2.3) 라디오버튼이 있는 항목형태의 설정해 보기
// builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialogInterface, int which) {
// Toast t= Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT);
// t.show();
//
// }
// });
//2.4) 체크박스버튼이 있는 리스트형태의 설정
// builder.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {
// @Override
// public void onClick(DialogInterface dialogInterface, int which, boolean b) {
// checked[which]= b;
//
// }
// });
//2.5) 커스텀뷰로 메세지영역 설정하기
LayoutInflater inflater= getLayoutInflater();
View view = inflater.inflate(R.layout.dialog, null);
builder.setView(view);
//3. 다이얼로그의 하단에 붙일 버튼 설정 [ 최소0개 ~ 최대3개까지 추가가능 : Positive, Negative, Neutral ]
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast t= Toast.makeText(MainActivity.this, "OK", Toast.LENGTH_SHORT);
t.show();
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast t= Toast.makeText(MainActivity.this, "CANCEL", Toast.LENGTH_SHORT);
t.show();
}
});
//4. 건축가객체(Builder)에게 위에서 설정한 내역으로 AlertDialog 객체를 생성해 달라고 요청
AlertDialog dialog= builder.create();
//5. 다이얼로그 보이기!!!
dialog.setCanceledOnTouchOutside(false);// 다이얼로그의 영역 밖을 터치하였을 때 다이얼로그가 꺼지는 것을 방지
dialog.show(); //다이얼로그 보이기
// ** 참고로 아래 설정은 디바이스의 [뒤로가기]버튼을 클릭해도 다이얼로그 꺼지지 않음.
//dialog.setCancelable(false); //[ 다이얼로그의 버튼들을 누르거나, dialog.dismiss() 를 호출해야 꺼짐 ]
// ## 여기서부터는 2.5)실습의 추가내용 #############################
// 커스텀뷰로 부터 뷰객체들 참조해오기
dialogEt= view.findViewById(R.id.dialog_et);
dialogTv= view.findViewById(R.id.dialog_tv);
}
//멤버변수
EditText dialogEt;
TextView dialogTv;
//커스텀뷰의 버튼(dialog.xml문서안에 있는 Button)에 설정된 onClick속성의 콜백메소드
public void clickDialogBtn(View v){
//MainActivity가 보여주고 있는 activit_main.xml에 EditText, TextView가 있는 것이 아니라서 찾을 수(findView) 없음.
//EditText et= findViewById(R.id.dialog_et);
//TextView tv= findViewById(R.id.dialog_tv);
//tv.setText( et.getText().toString() );
//이를 찾으려면 EditText, TextView를 가지고 있는 View에게 찾아달라고 해야함.
//저 위에 builder에게 setView할때 주어졌던 view( inflate를 통해 생성된 )가 dialog.xml의 root Elemnent(LinearLayout)이므로..
//이 view를 통해 미리 두개의 뷰를 얻어내었어야함.
dialogTv.setText( dialogEt.getText().toString() );
}
}
■ 커스텀 뷰 레이아웃 xml 파일
# res / layout / 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="200dp"
android:layout_height="match_parent"
android:padding="16dp">
<EditText
android:id="@+id/dialog_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="input text"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn"
android:onClick="clickDialogBtn"/>
<TextView
android:id="@+id/dialog_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="SHOW DATA"/>
</LinearLayout>
반응형