Unknown On 2014년 7월 14일 월요일

Android에서 지원하는 Alert Dialog종류
Alert Dialog 생성 코드는 간단하다. (본문 코드 출처 : Android 2.1 update 1 SDK API source)
onCreateDialog() method를 생성하고 id값을 받아 case로 분류하고 실행코드를 추가하면 된다.
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_YES_NO_MESSAGE:
case DIALOG_YES_NO_LONG_MESSAGE:
case DIALOG_LIST:
case DIALOG_PROGRESS:
case DIALOG_SINGLE_CHOICE:
case DIALOG_MULTIPLE_CHOICE:
case DIALOG_TEXT_ENTRY:
return null;
}
   
Dialog 호출 코드 역시 간단하다. showDialog(id) method를 이용해서 호출하면 된다.
showDialog(DIALOG_YES_NO_MESSAGE);
showDialog(DIALOG_YES_NO_LONG_MESSAGE);
showDialog(DIALOG_LIST);
showDialog(DIALOG_PROGRESS);
showDialog(DIALOG_SINGLE_CHOICE);
showDialog(DIALOG_MULTIPLE_CHOICE);
showDialog(DIALOG_TEXT_ENTRY);
   
Android 2.1 up1에서 지원하는 Alert Dialog type과 생성코드는 다음과 같다.
  • OK Cancel dialog with a message

   
## 실행 코드 ##


case DIALOG_YES_NO_MESSAGE:
  return new AlertDialog.Builder(AlertDialogSamples.this)
    .setIcon(R.drawable.alert_dialog_icon)
    .setTitle(R.string.alert_dialog_two_buttons_title)
    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        /* User clicked OK so do some stuff */
      }
    })
    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        /* User clicked Cancel so do some stuff */
      }
    })
    .create();
   
## 호출 코드 ##
showDialog(DIALOG_YES_NO_MESSAGE);
  
   
  • OK Cancel dialog with a long message

   



















## 실행 코드 ##


case DIALOG_YES_NO_LONG_MESSAGE:
  return new AlertDialog.Builder(AlertDialogSamples.this)
    .setIcon(R.drawable.alert_dialog_icon)
    .setTitle(R.string.alert_dialog_two_buttons_msg)
    .setMessage(R.string.alert_dialog_two_buttons2_msg)
    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        /* User clicked OK so do some stuff */
      }
    })
    .setNeutralButton(R.string.alert_dialog_something, new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
         /* User clicked Something so do some stuff */
       }
     })
     .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int whichButton) {
         /* User clicked Cancel so do some stuff */
       }
     })
     .create();
   
## 호출 코드 ##
showDialog(DIALOG_YES_NO_LONG_MESSAGE);
  
   
  • List dialog

   
## 실행 코드 ##


case DIALOG_LIST:
  return new AlertDialog.Builder(AlertDialogSamples.this)
  .setTitle(R.string.select_dialog)
  .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
      /* User clicked so do some stuff */
      /// 아래 코드는 List item click 시 테스트 코드
      String[] items = getResources().getStringArray(R.array.select_dialog_items);
      new AlertDialog.Builder(AlertDialogSamples.this)
      .setMessage("You selected: " + which + " , " + items[which]).show();
    }
  })
  .create();
   
## 호출 코드 ##
showDialog(DIALOG_LIST);
  
   
  • Progress dialog

   
## 실행 코드 ##


case DIALOG_PROGRESS:
  mProgressDialog = new ProgressDialog(AlertDialogSamples.this);
  mProgressDialog.setIcon(R.drawable.alert_dialog_icon);
  mProgressDialog.setTitle(R.string.select_dialog);
             mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
  mProgressDialog.setMax(MAX_PROGRESS);
  mProgressDialog.setButton(getText(R.string.alert_dialog_hide), 
    new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
                     /* User clicked Yes so do some stuff */
      }
    });
  mProgressDialog.setButton2(getText(R.string.alert_dialog_cancel), 
    new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        /* User clicked No so do some stuff */
      }
    });
  return mProgressDialog;
   
## 호출 코드 ##


showDialog(DIALOG_PROGRESS);
mProgress = 0;
mProgressDialog.setProgress(0);
mProgressHandler.sendEmptyMessage(0);



mProgressHandler = new Handler() {
  @Override
  public void handleMessage(Message msg) {
    super.handleMessage(msg);
    if (mProgress >= MAX_PROGRESS) {
      mProgressDialog.dismiss();
    } else {
      mProgress++;
      mProgressDialog.incrementProgressBy(1);
      mProgressHandler.sendEmptyMessageDelayed(0, 100);
    }
  }
};
  
   
  • Single choice list

   





















  ## 실행 코드 ##


case DIALOG_SINGLE_CHOICE:
  return new AlertDialog.Builder(AlertDialogSamples.this)
    .setIcon(R.drawable.alert_dialog_icon)
    .setTitle(R.string.alert_dialog_single_choice)
    .setSingleChoiceItems(R.array.select_dialog_items2, 0, 
      new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
          /* User clicked on a radio button do some stuff */
        }
      })
      .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
          /* User clicked Yes so do some stuff */
        }
      })
      .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
           /* User clicked No so do some stuff */
        }
     })
     .create();
   
## 호출 코드 ##
showDialog(DIALOG_SINGLE_CHOICE);
  
   
  • Repeat alarm

   





















            ## 실행 코드 ##


case DIALOG_MULTIPLE_CHOICE:
  return new AlertDialog.Builder(AlertDialogSamples.this)
    .setIcon(R.drawable.ic_popup_reminder)
    .setTitle(R.string.alert_dialog_multi_choice)
    .setMultiChoiceItems(R.array.select_dialog_items3,
      new boolean[]{false, true, false, true, false, false, false},
      new DialogInterface.OnMultiChoiceClickListener() {
        public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
          /* User clicked on a check box do some stuff */
        }
      })
      .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
          /* User clicked Yes so do some stuff */
        }
      })
      .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
           /* User clicked No so do some stuff */
        }
      })
      .create();
   
## 호출 코드 ##
showDialog(DIALOG_MULTIPLE_CHOICE);
  
   
  • Text Entry dialog







   
## 실행 코드 ##


case DIALOG_TEXT_ENTRY:
  // This example shows how to add a custom layout to an AlertDialog
  LayoutInflater factory = LayoutInflater.from(this);
  final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
  return new AlertDialog.Builder(AlertDialogSamples.this)
    .setIcon(R.drawable.alert_dialog_icon)
    .setTitle(R.string.alert_dialog_text_entry)
    .setView(textEntryView)
    .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        /* User clicked OK so do some stuff */
      }
    })
    .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {
        /* User clicked cancel so do some stuff */
      }
    })
    .create();
   
## 호출 코드 ##
showDialog(DIALOG_TEXT_ENTRY);
  
이중에서 쓰고 싶은 다이얼로그 종류룰 쓰면 된다.

다음에는 다이얼로그안에 이미지 넣는 방법을 설명하도록 하겠다. 


Leave a Reply

Subscribe to Posts | Subscribe to Comments

Powered by Blogger.