一塊兒學Android之Dialog

概述

對話框(Dialog)是一個小窗口,在Android系統開發中常常會用到,它提示用戶作決定或者輸入一些東西,對話框並不填充屏幕,是一個模態(Modal)窗口。Dialog類是全部對話框的基類,應避免直接實例化對話框,一般使用它的子類(AlertDialog,DatePickerDialog or TimePickerDialog),本文主要講解的是AlertDialog。數組

什麼是AlertDialog?

能夠顯示標題、最多三個按鈕、可供選擇的項目列表或自定義佈局的對話框。ide

建立步驟

  1. 構建一個Builder(AlertDialog.Builder)。
  2. 設置對話框標題(setTitle),內容信息(setMessage)。
  3. 設置對話框顯示的按鈕,最多三個按鈕(setPositiveButton,setNegativeButton)。
  4. 調用方法,建立對話框對象(create)。
  5. 顯示對話框(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     }

列表對話框

以下圖所示(彈出的對話框內容展現爲一個列表)用戶經過列表進行選擇ui

關鍵代碼以下:this

 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     }

單選按鈕對話框

以下圖所示(用戶經過單選按鈕進行選擇):spa

關鍵代碼以下:code

 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     }

複選框對話框

以下圖所示(對話框的內容能夠進行多選):對象

關鍵代碼以下:blog

 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     }

備註

記錄學習,記錄進步!

相關文章
相關標籤/搜索