對話框Dialog控件的使用

 在Android開發中,經常需要在界面上彈出一些對話框,用來提示用戶輸入信息或者讓用戶做出選擇,這就是Android中的對話框功能。

  那麼如何來實現這些對話框功能呢?在Android中,對話框是使用Dialog類來實現。其中,Alertialog用於實現警告對話框;ProgressDialog用於實現帶進度條的對話框;DatePickerDialog用於實現日期選擇對話框;TimePickerDialog用於實現時間選擇對話框。

  關於DatePickerDialog和TimePickerDialog的使用,我已經在博文《Android學習筆記23:時間日期控件的使用》(http://www.cnblogs.com/menlsh/archive/2013/02/23/2923867.html)中做了詳細介紹。在本篇博文中,我將以一個實例演示如何使用Alertialog和ProgressDialog對話框。

 

1.AlertDialog.Builder類

  在Android開發中,可以通過使用AlertDialog.Builder類來實現自定義的警告對話框。在使用AlertDialog.Builder類創建對話框的時候,通常需要用到以下的一些常用方法:

  (1)setTitle();     //設置對話框標題 

  (2)setIcon();     //設置對話框圖標 

  (3)setMessage();    //設置對話框內容 

  (4)setItems();      //設置要在對話框中顯示的項目列表 

  (5)setView();      //設置自定義的對話框樣式 

  (6)setSingleChoiceItems();   //設置對話框顯示一個單選框

  (7)setMultiChoiceItems();        //設置對話框顯示一系列的複選框 

  (8)setPositiveButton();     //設置對話框顯示一個“確定”按鈕 

  (9)setNeutralButton();     //設置對話框顯示一個“退出”按鈕 

  (10)setNegativeButton();    //設置對話框顯示一個“取消”按鈕

  (11)create();     //創建一個AlertDialog對話框

  (12)show();      //顯示對話框

  瞭解了以上這些創建AlertDialog對話框時的常用方法之後,我們就可以很容易的創建出一個AlertDialog對話框了,具體實現的源碼如下:

複製代碼
 1   //創建一個AlertDialog對話框
 2   //Author : 博客園-依舊淡然
 3   Dialog dialog = new AlertDialog.Builder(this)
 4       .setTitle("登錄提示")
 5       .setIcon(R.drawable.questionmark)
 6       .setMessage("是否登錄?")
 7       .setPositiveButton("確定", this)
 8       .setNeutralButton("退出", this)
 9       .create();        
10           
11   dialog.show();
複製代碼

  其中,我們爲AlertDialog對話框設置了標題爲“登錄提示”,設置了對話框圖標(從drawable中加載),設置了對話框的內容爲“是否登錄?”,併爲對話框設置了兩個按鈕(一個“確定”和一個“退出”按鈕)。程序運行後的效果如圖1所示。

圖1 登錄提示界面

 

2.按鍵監聽

  在如圖1所示的AlertDialog對話框中,有兩個按鈕:一個“確定”和一個“退出”按鈕,我們需要對這兩個按鈕進行事件監聽,以響應用戶的不同操作。

  要實現對AlertDialog對話框中的按鈕事件監聽也很容易,我們只需要繼承DialogInterface.OnClickListener接口,並實現DialogInterface.OnClickListener接口中的onClick()抽象方法即可。具體實現方法如下:

複製代碼
 1   /*
 2      * Function     :    事件監聽處理
 3      * Param        :    dialog對話框對象;which對話框中按鈕對象
 4      * Author       :    博客園-依舊淡然
 5      */
 6     public void onClick(DialogInterface dialog, int which) {
 7         switch (which) {
 8         case DialogInterface.BUTTON_POSITIVE:            //點擊“確定”進入登錄界面
 9             loginDialog = new LoginDialog(this);
10             break;
11         case DialogInterface.BUTTON_NEUTRAL:             //點擊“退出”
12             this.finish();
13             break;
14         }
15     }
複製代碼

  可以看出,在如圖1所示的登錄提示界面點擊“確定”將跳轉到登錄界面(關於登錄界面的實現隨後會介紹),點擊“退出”將通過使用finish當前Activity的方法消去登錄提示界面。

 

3.自定義AlertDialog對話框式樣

  通過以上的方法只能實現一些固定式樣的AlertDialog對話框,那麼如何來實現自定義的AlertDialog對話框式樣呢?下面我們就以登錄界面爲例實現一個簡單的自定義AlertDialog對話框。

  實現後的登錄界面如圖2所示。

圖2 登錄界面

  可以看出,在自定義的AlertDialog對話框中,我們加入了兩個TextView控件(用來顯示“帳號:”和“密碼:”)以及兩個EditText控件(用來輸入“帳號”和“密碼”)。

  如何將這些控件加入到自定義的AlertDialog對話框中呢?

  首先,我們需要創建一個xml佈局文件來加載這些控件。這裏,我創建了一個名爲“logindialog.xml”的佈局文件。在該佈局文件中完成對上述四個控件的佈局即可,具體的實現方法如下:

複製代碼
 1   <?xml version="1.0" encoding="utf-8"?>
 2   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3         android:orientation="vertical"
 4         android:layout_width="match_parent"
 5         android:layout_height="wrap_content"    >
 6     
 7         <TextView
 8             android:id="@+id/text_username"
 9             android:layout_width="match_parent"
10             android:layout_height="wrap_content"
11             android:layout_marginLeft="10dp"
12             android:gravity="left"
13             android:text="帳號:"
14             android:textColor="#FFFFFF"    ></TextView>
15     
16         <EditText
17             android:id="@+id/edit_username"
18             android:layout_width="match_parent"
19             android:layout_height="wrap_content"
20             android:layout_marginLeft="10dp"
21             android:layout_marginRight="10dp"
22             android:gravity="left"
23             android:hint="請輸入帳號"
24             android:inputType="none"
25             android:digits="abcdefghigklmnopqrstuvwxyz1234567890_"    ></EditText>
26     
27         <TextView
28             android:id="@+id/text_password"
29             android:layout_width="match_parent"
30             android:layout_height="wrap_content"
31             android:layout_marginLeft="10dp"
32             android:gravity="left"
33             android:text="密碼:"
34             android:textColor="#FFFFFF"    ></TextView>
35     
36         <EditText
37             android:id="@+id/edit_password"
38             android:layout_width="match_parent"
39             android:layout_height="wrap_content"
40             android:layout_marginLeft="10dp"
41             android:layout_marginRight="10dp"
42             android:gravity="left"
43             android:hint="請輸入密碼"
44             android:inputType="textPassword"
45             android:digits="1234567890"    ></EditText>
46 
47   </LinearLayout>
複製代碼

  完成xml佈局文件的編寫之後,我們需要將該xml文件動態加載並轉化爲View對象,然後通過AlertDialog.Builder類的setView()方法將該View對象加載進來,就可以完成自定義AlertDialog對話框的創建了。具體的實現方法如下:

複製代碼
 1   /*
 2     * Function    :    構造函數
 3     * Param       :    context上下文對象
 4     * Author      :    博客園-依舊淡然
 5     */
 6     public LoginDialog (Context context) {
 7             
 8         this.mContext = context;
 9             
10         //動態加載佈局生成View對象
11         LayoutInflater layoutInflater = LayoutInflater.from(mContext);
12         View longinDialogView = layoutInflater.inflate(R.layout.logindialog, null);
13             
14         //獲取佈局中的控件
15         mUserName = (EditText)longinDialogView.findViewById(R.id.edit_username);
16         mPassword = (EditText)longinDialogView.findViewById(R.id.edit_password);
17             
18         //創建一個AlertDialog對話框
19         longinDialog = new AlertDialog.Builder(mContext)
20             .setTitle("登錄框")
21             .setView(longinDialogView)                //加載自定義的對話框式樣
22             .setPositiveButton("確定", this)
23             .setNeutralButton("取消", this)
24             .create();  
25             
26         longinDialog.show();
27     }
複製代碼

  其中,通過mUserName = (EditText)longinDialogView.findViewById(R.id.edit_username);語句,我們可以獲得帳號輸入控件。通過mPassword = (EditText)longinDialogView.findViewById(R.id.edit_password);語句,我們可以獲得密碼輸入控件。從而進一步獲取這兩個EditText中的內容,判斷後用以進行下一步的操作。

 

4.帶進度條的對話框ProgressDialog

  在如圖2所示的登錄界面中,輸入正確的用戶名和密碼之後,點擊“確定”,將跳轉到登錄等待界面,如圖3所示。

圖3 登錄等待界面

  顯然可見,在圖3所示的登錄等待界面中有一個圓形的進度條(當然也可以加載一個長條形的進度條)。要顯示一個如圖3所示的帶進度條的對話框也很簡單,創建一個ProgressDialog對象並調用ProgressDialog類的show()方法進行顯示即可。

  ProgressDialog類的show()方法有四種形式,如圖4所示。

圖4 ProgressDialog類的show()方法

  這裏,我們選用最後一種方式實現帶進度條的對話框的顯示,具體實現方法如下:

1   //顯示一個帶進度條的對話框
2   //Author : 博客園-依舊淡然
3   mProgressDialog = ProgressDialog.show(mContext, "請等待", "正在登錄......", true);

  通過以上的方法,就可以顯示出來一個如圖3所示的帶有進度條的對話框了。

 

 

相關資料:

Android對話框(Dialog)大全

http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html

Android的AlertDialog詳解

http://www.2cto.com/kf/201205/131876.html

Android開發中Dialog對話框的使用

http://www.cctime.com/html/2011-12-1/20111211018584013.htm

AlertDialog中獲取控件的值

http://blog.163.com/ygq_hcl/blog/static/16242380520122815815902/

發佈了17 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章