새로운 Activity를 띄우지 않고 Windows의 팝업 창처럼 그냥 창을 띄워 상태 알람/진행을 표시하는 녀석이다.
아래 Sample은 각각 종류별로 정리했다. 종류는 아래와 같다.
- Basic Alert - 아주 기본적인 Alert Dialog
- Button add - Dialog 창에 Button이 추가
- List type - 여러가지 항목을 선택
- CheckBox type - CheckBox가 포함
- RadioButton type - RadioButton이 포함(미리 체크 항목을 선택 할 수 있음)
- ProgressDialog type - 동그란 에니메이션이 동작함
- ProgressBar type - 막대 형태로 진행 상태를 표시함
- Custom Dialog - 임의 디자인을 적용
1. Basic Alert
AlertDialog.Builder ab = null; ab = new AlertDialog.Builder( AlertDialogTest.this ); ab.setMessage( Html.fromHtml("<b><font color=#ff00ff> HTML View</font></b><br>Android.com")); ab.setPositiveButton(android.R.string.ok, null); ab.setTitle( "Basic Alert Dialog" ); ab.show();
|
2. Button add
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Are you sure you want to exit?") .setCancelable(false) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Toast.makeText(getApplicationContext(), "ID value is " + Integer.toString(id), Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("No", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Toast.makeText(getApplicationContext(), "ID value is " + Integer.toString(id), Toast.LENGTH_SHORT).show(); dialog.cancel(); } });
AlertDialog alert = builder.create(); alert.show();
|
3. List type
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); } }); AlertDialog alert = builder.create(); alert.show();
|
4. RadioButtons type
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show(); } }); AlertDialog alert = builder.create(); alert.show();
|
5. Checkboxes type
final CharSequence[] items = {"Red", "Green", "Blue"}; final boolean[] itemsChecked = {false, true, false };
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); builder.setMultiChoiceItems( items, itemsChecked, new DialogInterface.OnMultiChoiceClickListener() {
@Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { Toast.makeText( getApplicationContext(), items[which] + " Checked-" + Boolean.toString(isChecked), Toast.LENGTH_SHORT).show(); } });
AlertDialog alert = builder.create(); alert.show();
|
6. ProgressDialog type
private class ProgressDialogStop extends Thread { private final int mWaitTime = 3000; private ProgressDialog dialog = null;
public ProgressDialogStop(ProgressDialog dialog) { // TODO Auto-generated constructor stub this.dialog = dialog; }
@Override public void run() {
int iWait = 0; try { while( iWait < mWaitTime ) { this.sleep(100); iWait += 100; } }catch(Exception e) { // }
this.dialog.dismiss(); super.run(); } }
|
ProgressDialog dialog = ProgressDialog.show(AlertDialogTest.this, "", "Loading. Please wait...", true);
Thread ProgressDialogStopThread = new ProgressDialogStop( dialog ); ProgressDialogStopThread.start();
|
7. ProgressBar type
private class ProgressBarStop extends Thread { private final int mWaitTime = 100; private ProgressDialog progressDialog = null;
public ProgressBarStop(ProgressDialog progressDialog) { // TODO Auto-generated constructor stub this.progressDialog = progressDialog; }
@Override public void run() {
super.run();
// this.progressDialog.show(); // << 여기서 호출하면 Error 발생한다.
int iWait = 0; try { while( iWait < mWaitTime ) { this.sleep(100); iWait++; Log.i(LOGTAG, Integer.toString(iWait)); progressDialog.setProgress( iWait ); } }catch(Exception e) { Log.i(LOGTAG, e.getMessage()); }
this.progressDialog.dismiss(); } }
|
ProgressDialog progressDialog = null; progressDialog = new ProgressDialog( AlertDialogTest.this ); progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressDialog.setMessage("Loading..."); progressDialog.setMax(100); progressDialog.setCancelable(true);
progressDialog.setButton("Btn1", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText( getApplicationContext(), "Btn Click - " + Integer.toString(which), Toast.LENGTH_SHORT).show(); } });
progressDialog.setButton2("Btn2", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText( getApplicationContext(), "Btn 2 Click - " + Integer.toString(which), Toast.LENGTH_SHORT).show(); } });
progressDialog.show();
Thread PrgrsBarStop = new ProgressBarStop( progressDialog ); PrgrsBarStop.start();
|
8. CustomDialog type
별도 Dialog 타입 Layout을 설정해야 한다.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout01" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center" android:layout_width="200dip">
<TextView android:id="@+id/TextView01" android:layout_height="wrap_content" android:textColor="#fff" android:textStyle="bold" android:layout_width="wrap_content" android:text=" AndroidPeople.com"/>
<TextView android:id="@+id/TextView02" android:layout_height="wrap_content" android:textColor="#fff" android:layout_width="wrap_content" android:layout_margin="7dip" android:text="Custom Dialog Example By AndroidPeople.com" android:gravity="center"/>
<Button android:id="@+id/OkButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="OK" /> </LinearLayout>
|
import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; //http://about-android.blogspot.com/2010/02/create-custom-dialog.html
public class MyCustomDialog extends Dialog {
public MyCustomDialog(Context context) { super(context); this.setContentView(R.layout.custom_dialog); }
@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState);
Button btn = (Button)findViewById(R.id.OkButton); btn.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) { dismiss(); } }); } }
|
Dialog dialog = new MyCustomDialog(this);
dialog.show();
|
9. CustomDialog type 2
위 8번 내용을 그대로 사용.
AlertDialog.Builder md = new AlertDialog.Builder(this); LayoutInflater contents = LayoutInflater.from(this); View customView = contents.inflate(R.layout.custom_dialog, null);
Button btn = (Button)customView.findViewById(R.id.OkButton); btn.setVisibility(View.INVISIBLE);
md.setPositiveButton("Positive", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) { } });
md.setNegativeButton("Negative", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) { } });
md.setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) { } });
md.setView( customView ); md.show();
|
기본 참고 베이스에 적절히 응용하거나, 추가해서 쓰신다면 더 예쁘고 좋은 다이얼로그 만드실수 있을 겁니다.