對話框(Dialog)是一個在Android系統開發中經常會用到的小視窗,它提示用戶做決定或者輸入一些東西,對話框並不填充屏幕,是一個模態(Modal)視窗。Dialog類是所有對話框的基類,應避免直接實例化對話框,通常使用它的子類(AlertDialog,DatePickerDialog or T... ...
概述
對話框(Dialog)是一個小視窗,在Android系統開發中經常會用到,它提示用戶做決定或者輸入一些東西,對話框並不填充屏幕,是一個模態(Modal)視窗。Dialog類是所有對話框的基類,應避免直接實例化對話框,通常使用它的子類(AlertDialog,DatePickerDialog or TimePickerDialog),本文主要講解的是AlertDialog。
什麼是AlertDialog?
可以顯示標題、最多三個按鈕、可供選擇的項目列表或自定義佈局的對話框。
創建步驟
- 構建一個Builder(AlertDialog.Builder)。
- 設置對話框標題(setTitle),內容信息(setMessage)。
- 設置對話框顯示的按鈕,最多三個按鈕(setPositiveButton,setNegativeButton)。
- 調用方法,創建對話框對象(create)。
- 顯示對話框(show)。
涉及知識點
- AlertDialog.Builder 對話框構造器,可以進行對話框進行設置,並創建對話框對象。
- setTitle 設置對話框標題,setMessage設置對話框顯示的文本內容
- setNegativeButton 設置對話框顯示的否定按鈕(Cancel), setPositiveButton設置對話框顯示的肯定按鈕(OK)
- show() 顯示對話框
- setItems 設置對話框的列表內容
- setSingleChoiceItems 設置單選按鈕的列表項,setMultiChoiceItems設置多選按鈕的列表項
- setView 設置自定義視圖的對話框
預設對話框
如下圖所示(顯示了標題,內容,兩個按鈕):
關鍵代碼如下:
1 /** 2 * 預設對話框事件響應方法 3 * 4 * @param v 5 */ 6 public void showDefaultDialog(View v) { 7 //創建一個Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //設置對話框標題 10 builder.setTitle("提示"); 11 //設置對話框內容 12 builder.setMessage("這是一個對話框的提示"); 13 //積極按鈕? 14 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 15 @Override 16 public void onClick(DialogInterface dialog, int which) { 17 Toast.makeText(MainActivity.this, "你選擇了OK", Toast.LENGTH_SHORT).show(); 18 } 19 }); 20 //消極按鈕 21 builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 22 @Override 23 public void onClick(DialogInterface dialog, int which) { 24 Toast.makeText(MainActivity.this, "你選擇了Cancel", Toast.LENGTH_SHORT).show(); 25 } 26 }); 27 //創建一個對話框 28 AlertDialog dialog = builder.create(); 29 //顯示一個對話框 30 dialog.show(); 31 }
列表對話框
如下圖所示(彈出的對話框內容展示為一個列表)用戶通過列表進行選擇
關鍵代碼如下:
1 /** 2 * 列表對話框響應事件 3 * 4 * @param v 5 */ 6 public void showListDialog(View v) { 7 //構件一個對話框Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //設置標題 10 builder.setTitle(R.string.pick_color); 11 //將資源文件轉化為數組對象 12 arr_colors = getResources().getStringArray(R.array.arr_colors); 13 //設置列表內容和點擊事件 14 builder.setItems(R.array.arr_colors, new DialogInterface.OnClickListener() { 15 @Override 16 public void onClick(DialogInterface dialog, int which) { 17 Toast.makeText(MainActivity.this, "你選擇了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show(); 18 } 19 }); 20 //創建一個對話框 21 AlertDialog dialog = builder.create(); 22 //顯示一個對話框 23 dialog.show(); 24 }
單選按鈕對話框
如下圖所示(用戶通過單選按鈕進行選擇):
關鍵代碼如下:
1 /** 2 * 單選框對話框按鈕事件 3 * 4 * @param v 5 */ 6 public void showSingleDialog(View v) { 7 //構件一個對話框Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //設置標題 10 builder.setTitle(R.string.pick_color); 11 //將資源文件轉化為數組對象 12 arr_colors = getResources().getStringArray(R.array.arr_colors); 13 checkedItems=new int[arr_colors.length]; 14 //設置列表內容和點擊事件,第二個參數checkedItem表示預設選中項 15 builder.setSingleChoiceItems(R.array.arr_colors, 0, new DialogInterface.OnClickListener() { 16 @Override 17 public void onClick(DialogInterface dialog, int which) { 18 for(int i=0;i<checkedItems.length;i++){ 19 if(i==which){ 20 checkedItems[i]=1; 21 }else{ 22 checkedItems[i]=0; 23 } 24 } 25 Toast.makeText(MainActivity.this, "你選擇了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show(); 26 } 27 }); 28 //積極按鈕? 29 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 30 @Override 31 public void onClick(DialogInterface dialog, int which) { 32 Toast.makeText(MainActivity.this, "你選擇了OK"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 33 } 34 }); 35 //消極按鈕 36 builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 37 @Override 38 public void onClick(DialogInterface dialog, int which) { 39 Toast.makeText(MainActivity.this, "你選擇了Cancel"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 40 } 41 }); 42 //創建一個對話框 43 AlertDialog dialog = builder.create(); 44 //顯示一個對話框 45 dialog.show(); 46 }
覆選框對話框
如下圖所示(對話框的內容可以進行多選):
關鍵代碼如下:
1 /** 2 * 覆選框對話框事件 3 * 4 * @param v 5 */ 6 public void showMultipleDialog(View v) { 7 //構件一個對話框Builder 8 AlertDialog.Builder builder = new AlertDialog.Builder(this); 9 //設置標題 10 builder.setTitle(R.string.pick_color); 11 //將資源文件轉化為數組對象 12 arr_colors = getResources().getStringArray(R.array.arr_colors); 13 checkedItems=new int[arr_colors.length]; 14 //設置列表內容和點擊事件 15 builder.setMultiChoiceItems(R.array.arr_colors, null, new DialogInterface.OnMultiChoiceClickListener() { 16 @Override 17 public void onClick(DialogInterface dialog, int which, boolean isChecked) { 18 String msg=""; 19 if(isChecked){ 20 checkedItems[which]=1; 21 msg="選擇"; 22 }else{ 23 checkedItems[which]=0; 24 msg="取消"; 25 } 26 Toast.makeText(MainActivity.this, "你"+msg+"了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show(); 27 } 28 }); 29 //積極按鈕? 30 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 31 @Override 32 public void onClick(DialogInterface dialog, int which) { 33 Toast.makeText(MainActivity.this, "你選擇了OK:"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 34 } 35 }); 36 //消極按鈕 37 builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 38 @Override 39 public void onClick(DialogInterface dialog, int which) { 40 Toast.makeText(MainActivity.this, "你選擇了Cancel:"+getCheckedItems(), Toast.LENGTH_SHORT).show(); 41 } 42 }); 43 //創建一個對話框 44 AlertDialog dialog = builder.create(); 45 //顯示一個對話框 46 dialog.show(); 47 }
自定義對話框
如下圖所示(用戶可以在彈出的對話框中輸入內容等信息)
關鍵代碼如下:
1 /** 2 * 自定義對話框事件按鈕 3 * @param v 4 */ 5 public void showCustomerDialog(View v) { 6 7 AlertDialog.Builder builder = new AlertDialog.Builder(this); 8 // Get the layout inflater 9 LayoutInflater inflater = getLayoutInflater(); 10 View customerView=inflater.inflate(R.layout.dialog_layout, null); 11 // Inflate and set the layout for the dialog 12 // Pass null as the parent view because its going in the dialog layout 13 mUserName= (EditText) customerView.findViewById(R.id.username); 14 mPassword= (EditText) customerView.findViewById(R.id.password); 15 builder.setView(customerView) 16 // Add action buttons 17 .setPositiveButton(R.string.sign_in, new DialogInterface.OnClickListener() { 18 @Override 19 public void onClick(DialogInterface dialog, int id) { 20 // sign in the user ... 21 Toast.makeText(MainActivity.this, "你輸入的用戶名為:"+mUserName.getText()+"密碼為:"+mPassword.getText(), Toast.LENGTH_SHORT).show(); 22 } 23 }) 24 .setNegativeButton(R.string.cancel2, new DialogInterface.OnClickListener() { 25 public void onClick(DialogInterface dialog, int id) { 26 Toast.makeText(MainActivity.this, "你取消了輸入的用戶名密碼", Toast.LENGTH_SHORT).show(); 27 28 } 29 }); 30 //創建一個對話框 31 AlertDialog dialog = builder.create(); 32 //顯示一個對話框 33 dialog.show(); 34 }
備註
記錄學習,記錄進步!