Dialog 팝업창 종류 및 커스텀 Dialog 팝업창
개발/안드로이드 2017. 9. 5. 09:00자주 사용하는 다이얼 로그 간단한 예제와 커스텀 다이얼 로그에 대해서 설명 하도록 하겠습니다.
1. 일반 Dialog
일반적으로 알림/경고 용도로 많이 사용하고 있는 팝업창 입니다.
확인,취소 버튼을 표시하고 선택에 따라 행동하는 상황에서 많이 사용하게 됩니다.
AlertDialog.Builder oDialog = new AlertDialog.Builder(this,
android.R.style.Theme_DeviceDefault_Light_Dialog);
oDialog.setMessage("앱을 종료하시겠습니까?")
.setTitle("일반 Dialog")
.setPositiveButton("아니오", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Log.i("Dialog", "취소");
Toast.makeText(getApplicationContext(), "취소", Toast.LENGTH_LONG).show();
}
})
.setNeutralButton("예", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
m_oMainActivity.finish();
}
})
.setCancelable(false) // 백버튼으로 팝업창이 닫히지 않도록 한다..show();
AlertDialog.Builder 를 생성할 때 생성자 두번째 인자에 테마를 지정할 수 있습니다.
1 2 | AlertDialog.Builder oDialog = new AlertDialog.Builder(this, android.R.style.Theme_DeviceDefault_Light_Dialog); | cs |
만약 테마를 지정 하지 않을 경우 아래와 같은 이미지가 나오게 됩니다.
1 | AlertDialog.Builder oDialog = new AlertDialog.Builder(this); | cs |
2. 목록 선택 Dialog
여러항목 중 하나를 선택 할 수 있는 팝업창 입니다. 취소는 할 수 없습니다. 백버튼으로 선택을 안 할 수 있지만 setCancelable 메소드를 사용하게 되면 백버튼도 먹지 않게 됩니다.
final CharSequence[] oItems = {"하나", "둘", "셋", "넷", "다셋"};
AlertDialog.Builder oDialog = new AlertDialog.Builder(this,
android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
oDialog.setTitle("색상을 선택하세요")
.setItems(oItems, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
Toast.makeText(getApplicationContext(),
oItems[which], Toast.LENGTH_LONG).show();
}
})
.setCancelable(false)
.show();
3. 라디오 버튼 Dialog
라디오 버튼을 이용하여 항목을 선택하는 팝업창을 표시합니다.
일반 Dialog 는 확인/취소 버튼만 존재하여 두가지 선택만 할 수있고, 목록 선택 Dialog는 여러항목이 있지만 취소를 할 수 없었습니다.
라디오 버튼 Dialog는 여러항목을 보여주며 선택 후 확인을 눌러야 팝업이 닫히는 Dialog 입니다.
final CharSequence[] oItems = {"하나", "둘", "셋", "넷", "다셋"};
AlertDialog.Builder oDialog = new AlertDialog.Builder(this,
android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
oDialog.setTitle("색상을 선택하세요")
.setSingleChoiceItems(oItems, -1, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
nSelectItem = which;
}
})
.setNeutralButton("선택", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
if (which >= 0)
Toast.makeText(getApplicationContext(),
oItems[nSelectItem], Toast.LENGTH_LONG).show();
}
})
.setCancelable(false)
.show();
4. HTML Dialog
팝업 내용을 HTML로 표현 할 때 사용하는 팝업창입니다.
장점으로는 텍스트 내용 중간에 색상 변경 등 CSS 를 사용할 수 있다는 장점이 있습니다.
AlertDialog.Builder oDialog = new AlertDialog.Builder(this,
android.R.style.Theme_DeviceDefault_Light_Dialog_Alert);
String strHtml =
"<b><font color='#ff0000'>HTML 컨텐츠 팝업</font></b> 입니다.<br/>HTML이 제대로 표현되나요?";
Spanned oHtml;
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.N) {
// noinspection deprecation
oHtml = Html.fromHtml(strHtml);
}
else
{
oHtml = Html.fromHtml(strHtml, Html.FROM_HTML_MODE_LEGACY);
}
oDialog.setTitle("색상을 선택하세요")
.setMessage(oHtml)
.setPositiveButton("ok", null)
.setCancelable(false)
.show();
5. 날짜 Dialog
날짜를 선택하는 Picker 팝업창 입니다.
Calendar c = Calendar.getInstance();
int nYear = c.get(Calendar.YEAR);
int nMon = c.get(Calendar.MONTH);
int nDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
String strDate = String.valueOf(year) + "년 ";
strDate += String.valueOf(monthOfYear+1) + "월 ";
strDate += String.valueOf(dayOfMonth) + "일";
Toast.makeText(getApplicationContext(), strDate, Toast.LENGTH_SHORT).show();
}
};
DatePickerDialog oDialog = new DatePickerDialog(this,
android.R.style.Theme_DeviceDefault_Light_Dialog,
mDateSetListener, nYear, nMon, nDay);
oDialog.show();
6. 시간 Dialog
시간을 선택하는 팝업창 입니다.
TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(getApplicationContext(),
hourOfDay + ":" + minute, Toast.LENGTH_SHORT)
.show();
}
};
TimePickerDialog oDialog = new TimePickerDialog(this,
android.R.style.Theme_DeviceDefault_Light_Dialog,
mTimeSetListener, 0, 0, false);
oDialog.show();
7. 프로그레스(Progress) Dialog
프로그레스 바를 표시해주는 Dialog Box 입니다.
ProgressDialog oDialog = new ProgressDialog(this,
android.R.style.Theme_DeviceDefault_Light_Dialog);
oDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
oDialog.setMessage("잠시만 기다려 주세요.");
oDialog.show();
8. 로딩바 Dialog
Html 코드를 이용하여 색상, 크기등을 설정하여 표시해 줄 수 있습니다. 예제 코드를 보고 알아 보도록 합시다.
final ProgressDialog oDialog = new ProgressDialog(this,
android.R.style.Theme_DeviceDefault_Light_Dialog);
oDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
oDialog.setMessage("로딩중..");
oDialog.setMax(200);
oDialog.show();
// Progress 증가 시키기.
oDialog.setProgress(111);
9. Custom Dialog
기존 Dialog는 쉽고 간편하게 사용할 수 있고, 정해져 있는 UI만을 이용하는 Dialog Box 였습니다.
그러나 개발하다 보면 여러가지 형태의 화면을 구성하고 싶을때가 많겠죠.
그래서 Dialog를 상속 받아서 UI 를 원하는 형태대로 편집을 하고 싶을때 사용하시면 됩니다.
public class CustomDialog extends Dialog
{
CustomDialog m_oDialog;
public CustomDialog(Context context)
{
super(context, android.R.style.Theme_Translucent_NoTitleBar);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
WindowManager.LayoutParams lpWindow = new WindowManager.LayoutParams();
lpWindow.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;
lpWindow.dimAmount = 0.5f;
getWindow().setAttributes(lpWindow);
setContentView(R.layout.custom_dialog);
m_oDialog = this;
TextView oView = (TextView) this.findViewById(R.id.textView);
oView.setText("Custom Dialog\n테스트입니다.");
Button oBtn = (Button)this.findViewById(R.id.btnOK);
oBtn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
onClickBtn(v);
}
});
}
public void onClickBtn(View _oView)
{
this.dismiss();
}
}
Custom Dialog 를 호출 하려면 여느 Dialog처럼 하시면 됩니다.
1 2 3 | CustomDialog oDialog = new CustomDialog(this); oDialog.setCancelable(false); oDialog.show(); | cs |
이상 Dialog 에 대해서 알아보았습니다. 유용한 자료였으면 하네요.
프로젝트는 아래에서 다운받아 확인 해 보시면 됩니다.
'개발 > 안드로이드' 카테고리의 다른 글
안드로이드 Java ArrayList, List <=> String[] 변환 (0) | 2017.09.20 |
---|---|
안드로이드 Java String 문자열 다루기 정리 (0) | 2017.09.18 |
ListView Custom 기본코드 (0) | 2017.09.15 |
안드로이드,아이폰에서 euc-kr 한글을 utf-8 변환 (euc-kr -> utf-8) (0) | 2017.09.07 |
앱내 Webview에서 HTTPS 처리 이슈 (0) | 2017.08.09 |
안드로이드 String 메모리 보안이슈 해결하기 (메모리 취약점) #1 (0) | 2017.08.06 |
안드로이드 6.0 (Marshmallow) 권한 획득하기! (1) | 2017.08.04 |
모바일웹 - 앱내 webview를 이용하여 확대/축소 하기 (0) | 2017.08.02 |