alertDialog全解析

Android 對話框(Dialog)大全 創建你本身的對話框

  Activities提供了一種方便管理的建立、保存、回覆的對話框機制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,若是使用這些方法的話,Activity將經過getOwnerActivity()方法返回該Activity管理的對話框(dialog).html

 

  onCreateDialog(int):當你使用這個回調函數時,Android系統會有效的設置這個Activity爲每一個對話框的全部者,從而自動管理每一個對話框的狀態並掛靠到Activity上。這樣,每一個對話框繼承這個Activity的特定屬性。好比,當一個對話框打開時,菜單鍵顯示爲這個Activity定義的選項菜單,音量鍵修改Activity使用的音頻流。java

 

  showDialog(int): 當你想要顯示一個對話框時,調用showDialog(int id) 方法並傳遞一個惟一標識這個對話框的整數。當對話框第一次被請求時,Android從你的Activity中調用onCreateDialog(int id),你應該在這裏初始化這個對話框Dialog。這個回調方法被傳以和showDialog(int id)相同的ID。當你建立這個對話框後,在Activity的最後返回這個對象。android

 

  onPrepareDialog(int, Dialog):在對話框被顯示以前,Android還調用了可選的回調函數onPrepareDialog(int id, Dialog). 若是你想在每一次對話框被打開時改變它的任何屬性,你能夠定義這個方法。這個方法在每次打開對話框時被調用,而onCreateDialog(int) 僅在對話框第一次打開時被調用。若是你不定義onPrepareDialog(),那麼這個對話框將保持和上次打開時同樣。這個方法也被傳遞以對話框的ID,和在onCreateDialog()中建立的對話框對象。ide

 

  dismissDialog(int):當你準備關閉對話框時,你能夠經過對這個對話框調用dismiss()來消除它。若是須要,你還能夠從這個Activity中調用dismissDialog(int id) 方法,這實際上將爲你對這個對話框調用dismiss() 方法。 若是你想使用onCreateDialog(int id) 方法來管理你對話框的狀態(就如同在前面的章節討論的那樣),而後每次你的對話框消除的時候,這個對話框對象的狀態將由該Activity保留。若是你決定再也不須要這個對象或者清除該狀態是重要的,那麼你應該調用removeDialog(int id)。這將刪除任何內部對象引用並且若是這個對話框正在顯示,它將被消除。函數

 

下面是幾種對話框的效果佈局

圖1ui

圖2this

圖3spa

圖4code

圖5

圖6

圖7

  圖1效果:該效果是當按返回按鈕時彈出一個提示,來確保無誤操做,採用常見的對話框樣式。

     代碼:

  建立對話框方法dialog()

protected void dialog() {  
      AlertDialog.Builder builder = new Builder(Main.this);  
      builder.setMessage("確認退出嗎?");
      builder.setTitle("提示");
      builder.setPositiveButton("確認", new OnClickListener() {
           @Override   
           public void onClick(DialogInterface dialog, int which) {    
               dialog.dismiss();
               Main.this.finish();  
           }  
       });
      builder.setNegativeButton("取消", new OnClickListener() {
           @Override   
           public void onClick(DialogInterface dialog, int which) {    
               dialog.dismiss();   
           }  
       });
      builder.create().show(); 
  }


 

在onKeyDown(int keyCode, KeyEvent event)方法中調用此方法

public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
   dialog();
  }
  return false;
 }


  圖2效果:改變了對話框的圖表,添加了三個按鈕

Dialog dialog = new AlertDialog.Builder(this).setIcon(
     android.R.drawable.btn_star).setTitle("喜愛調查").setMessage(     
     "你喜歡李連杰的電影嗎?").setPositiveButton("很喜歡", new OnClickListener() {
      @Override      
      public void onClick(DialogInterface dialog, int which) {       
      Toast.makeText(Main.this, "我很喜歡他的電影。",Toast.LENGTH_LONG).show();      
      }     
      }).setNegativeButton("不喜歡", new OnClickListener() {
        @Override    
        public void onClick(DialogInterface dialog, int which) {     
            Toast.makeText(Main.this, "我不喜歡他的電影。", Toast.LENGTH_LONG).show();   
        }   
        }).setNeutralButton("通常", new OnClickListener() {
        @Override    
        public void onClick(DialogInterface dialog, int which) {     
            Toast.makeText(Main.this, "談不上喜歡不喜歡。", Toast.LENGTH_LONG).show();    
        }   
        }).create();
       dialog.show();


 

圖3效果:信息內容是一個簡單的View類型

new AlertDialog.Builder(this).setTitle("請輸入").setIcon(
     android.R.drawable.ic_dialog_info).setView(
     new EditText(this)).setPositiveButton("肯定", null)
     .setNegativeButton("取消", null).show();

 

圖4效果:信息內容是一組單選框

new AlertDialog.Builder(this).setTitle("複選框").setMultiChoiceItems(
     new String[] { "Item1", "Item2" }, null, null)
     .setPositiveButton("肯定", null)
     .setNegativeButton("取消", null).show();

 

圖5效果:信息內容是一組多選框

new AlertDialog.Builder(this).setTitle("單選框").setIcon(
     android.R.drawable.ic_dialog_info).setSingleChoiceItems(
     new String[] { "Item1", "Item2" }, 0,
     new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int which) {
       dialog.dismiss();
      }
     }).setNegativeButton("取消", null).show();

 

圖6效果:信息內容是一組簡單列表項

new AlertDialog.Builder(this).setTitle("列表框").setItems(
     new String[] { "Item1", "Item2" }, null).setNegativeButton(
     "肯定", null).show();

 

圖7效果:信息內容是一個自定義的佈局

1.佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_height="wrap_content" android:layout_width="wrap_content"
 android:background="#ffffffff" android:orientation="horizontal"
 android:id="@+id/dialog">
 <TextView android:layout_height="wrap_content"
   android:layout_width="wrap_content"
  android:id="@+id/tvname" android:text="姓名:" />
 <EditText android:layout_height="wrap_content"
  android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth="100dip"/>

</LinearLayout>

2.調用代碼

LayoutInflater inflater = getLayoutInflater();
   View layout = inflater.inflate(R.layout.dialog,
     (ViewGroup) findViewById(R.id.dialog));

   new AlertDialog.Builder(this).setTitle("自定義佈局").setView(layout)
     .setPositiveButton("肯定", null)
     .setNegativeButton("取消", null).show();

相關文章
相關標籤/搜索