Android Dialog

Toast

사용자에게 메시지를 알리면서 사용자 행동을 방해하지 않는며 시간이 지나면 자동으로 사라진다.
그래서 사용자에게 꼭 알려야 하는건 일단 다이얼로그로 띄어야 한다.

makeText(Context context, int resId, int duration)
makeText(Context context, CharSequence text, int duration)

두번째 매개변수가 토스트로 띄울 메세지이며
세번째 매개변수는 지속 시간이로 LENGTH_SHORT, LENGTH_LONG으로 지정하며
LENGTH_SHORT 는 3초 LENGTH_LONG는 5초를 가르킨다. 임의의 숫자값으로 지정할 수 는 없다

원한다면 다음과 같은 함수를 이용하여 추가로 설정 가능하다

setDuration(int duration)
setText(int resId) // 문자열과 화면에 보이는 시간을 설정
setView(View view) // 임의의 뷰를 토스트로 띄울 수 있음
setGravity(int gravity, int xOffset, int yOffset)
setMargin(float horizontalMargin, float verticalMargin) // 뜨는 위치를 조정

알림 창(AlertDialog)

토스트와는 다르게 시간이 지나도 사라지지 않는 알림 창

알림창은 맨 윗줄 타이틀 영역(아이콘 이미지와 문자열), 본문에 해당하는 영역(문자열을 비롯하여 다양하게 구성 가능),
창 아래는 버튼 영역으로써 타이틀과 버튼에 대한 정보를 지정하지 않으면 두 영역은 출력되지 않는다.

new연산자가 아닌 Bulider 클래스로 생성해야 한다.

AlertDialog.Bulider builder = new AlertDialog.Bulider(this);

이것은 알림창이 아니라 빌더 클래스의 객체를 생성한 것 입니다.
Builder 객체의 여러 setter 메서드를 이용하여 다이얼로그 구성을 설정하면 Builder 객체가 알림창을 생성해주는 구조 이다.

setIcon(int iconId) : 타이틀 영역의 아이콘 지정
setMessage(CharSequence message) : 본문을 단순 문자열로 구성
setTitle(CharSequence title) : 타이틀 문자열 지정

알림창에 버튼을 추가 하려면

setPositiveButten(CharSequence text, DialogInterface.OnClickListener listener)
setNegativeButten(CharSequence text, DialogInterface.OnClickListener listener)
setNeutralButten(CharSequence text, DialogInterface.OnClickListener listener)

몇개를 추가하든 개발자 마음이지만 같은 성격의 버튼 2가지는 추가할 수 없다. 한마디로 중복이 되지 않는다.

builder.setIcon(android.R.drawble.ic_dialog_alert);
builder.setTitle(“알림”);
builder.setMessage(“정말 종료 하시겠습니까?);
builder.setPositiveButton(“ok”,null);
builder.setNegativeButton(“no”,null);

만든 객체를 출력하려면

alertDialog = builder.create();
alertDialog.show();

이렇게만 하면 버튼을 누르거나 알림 창 밖에 화면을 터치하거나 뒤로가기 버튼을 누르면 알림이 꺼지는데

버튼으로만 알림 화면을 끄고 싶다면

뒤로 가기를 버튼을 막으려면
setCancelable(boolean cancelable) 함수를 사용해야 한다.

알림 창 밖에 화면 터치로 알림 창이 꺼지는 것을 막으려면
setCanceledOnTouchOutside(boolean cancel) 함수를 사용 하면 된다.

목록(AlertDialog)

목록을 구성하기 위한 무자열 배열을 주면 알아서 목록 다이얼로그 형태로 만들어 줍니다.

목록을 구성하기 위한 무자열을 배열 리소스로 만들어 사용하려면
setItems(int itemsId, DialogInterface.OnClickListener listener)

코드에소 직접 배열을 만들어 배열을 매개변수로 지정하여 사용하려면
setItems(CharSequence[] items, DialogInterface.OnClickListener listener)

목록에서 사용자 항목 선택 이벤트는 setItems() 함수의 두 번째 매개변수를 이용하여 구현 가능 하다.
builder.setItems(R.array.dialog_array, dialogListener);

이벤트 핸들러 객체를 등록 하려면

DialogInterface.OnClieklistener dialogListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

}

};

프로그래서 다이얼로그

진행상태 바를 보여주는 알림 창로써

원모양의 다이얼로그 (동글동글 돌면서 진행상태는 보여주지 않음)

ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setIcon(andriod.R.drawable.ic_dialog_alert);
progressDialog.setTItle(“wait..”);
progressDialog.setMessage(“ 서버 연동 중 입니다”);
progressDialog.show();

막대기 모양의 다이얼로그( 진행상태를 0~100%로 보여줌)

progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMax(100);

날짜 선택 (DatePickerDialog)

사용자가 다이얼로그 창에서 날짜를 선택하게 할 수 있도록 DatePickerDialog를 제공한다.

DatePickerDialog dateDialog = new DatePickerDialog(this, null, year, month, day);

사용자가 날짜를 선택 하려면

DatePickerDialog dateDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
}
}, year, month, day);

시간 선택(TimePickerDialog)

TimePickerDialog timeDialog = new TimePickerDialog(this, null, hour, minute, true);

여기서 true 값을 false 로 바꾸면 기본 24시간 체계에서 12시간 체계로 바뀌며 오전 오후를 선택할 수 있게 된다.

TimePickerDialog timeDialog = new TImePickerDialog(this, new TimePickerDialog.OnTimeSetListener(){
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
}
}, hour, minute, false);

커스텀 다이얼로그(AlertDialog)

개발자가 직접 만드는 다이얼로그!

레이아웃 xml 파일에 만든다.

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout_custom, null);
builder.setView(view);

개발자가 직접 구성한 뷰를 setView() 하수를 통해 다이얼로그 본문으로 지정하여 구현합니다.