在Android開發(fā)中,,經(jīng)常需要在界面上彈出一些對話框,,用來提示用戶輸入信息或者讓用戶做出選擇,這就是Android中的對話框功能,。 那么如何來實現(xiàn)這些對話框功能呢,?在Android中,對話框是使用Dialog類來實現(xiàn),。其中,,Alertialog用于實現(xiàn)警告對話框;ProgressDialog用于實現(xiàn)帶進度條的對話框,;DatePickerDialog用于實現(xiàn)日期選擇對話框,;TimePickerDialog用于實現(xiàn)時間選擇對話框。 關(guān)于DatePickerDialog和TimePickerDialog的使用,,我已經(jīng)在博文《Android學(xué)習(xí)筆記23:時間日期控件的使用》(http://www.cnblogs.com/menlsh/archive/2013/02/23/2923867.html)中做了詳細介紹,。在本篇博文中,我將以一個實例演示如何使用Alertialog和ProgressDialog對話框,。
1.AlertDialog.Builder類 在Android開發(fā)中,,可以通過使用AlertDialog.Builder類來實現(xiàn)自定義的警告對話框。在使用AlertDialog.Builder類創(chuàng)建對話框的時候,,通常需要用到以下的一些常用方法: ?。?)setTitle(); //設(shè)置對話框標(biāo)題 (2)setIcon(); //設(shè)置對話框圖標(biāo) ?。?)setMessage(); //設(shè)置對話框內(nèi)容 ?。?)setItems(); //設(shè)置要在對話框中顯示的項目列表 (5)setView(); //設(shè)置自定義的對話框樣式 ?。?)setSingleChoiceItems(); //設(shè)置對話框顯示一個單選框 ?。?)setMultiChoiceItems(); //設(shè)置對話框顯示一系列的復(fù)選框 (8)setPositiveButton(); //設(shè)置對話框顯示一個“確定”按鈕 ?。?)setNeutralButton(); //設(shè)置對話框顯示一個“退出”按鈕 ?。?0)setNegativeButton(); //設(shè)置對話框顯示一個“取消”按鈕 (11)create(); //創(chuàng)建一個AlertDialog對話框 ?。?2)show(); //顯示對話框 了解了以上這些創(chuàng)建AlertDialog對話框時的常用方法之后,,我們就可以很容易的創(chuàng)建出一個AlertDialog對話框了,具體實現(xiàn)的源碼如下: 1 //創(chuàng)建一個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(); 其中,,我們?yōu)锳lertDialog對話框設(shè)置了標(biāo)題為“登錄提示”,設(shè)置了對話框圖標(biāo)(從drawable中加載),,設(shè)置了對話框的內(nèi)容為“是否登錄,?”,,并為對話框設(shè)置了兩個按鈕(一個“確定”和一個“退出”按鈕)。程序運行后的效果如圖1所示,。
圖1 登錄提示界面
2.按鍵監(jiān)聽 在如圖1所示的AlertDialog對話框中,,有兩個按鈕:一個“確定”和一個“退出”按鈕,我們需要對這兩個按鈕進行事件監(jiān)聽,,以響應(yīng)用戶的不同操作,。 要實現(xiàn)對AlertDialog對話框中的按鈕事件監(jiān)聽也很容易,我們只需要繼承DialogInterface.OnClickListener接口,,并實現(xiàn)DialogInterface.OnClickListener接口中的onClick()抽象方法即可,。具體實現(xiàn)方法如下: 1 /* 2 * Function : 事件監(jiān)聽處理 3 * Param : dialog對話框?qū)ο螅粀hich對話框中按鈕對象 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所示的登錄提示界面點擊“確定”將跳轉(zhuǎn)到登錄界面(關(guān)于登錄界面的實現(xiàn)隨后會介紹),,點擊“退出”將通過使用finish當(dāng)前Activity的方法消去登錄提示界面。
3.自定義AlertDialog對話框式樣 通過以上的方法只能實現(xiàn)一些固定式樣的AlertDialog對話框,,那么如何來實現(xiàn)自定義的AlertDialog對話框式樣呢,?下面我們就以登錄界面為例實現(xiàn)一個簡單的自定義AlertDialog對話框。 實現(xiàn)后的登錄界面如圖2所示,。
圖2 登錄界面 可以看出,,在自定義的AlertDialog對話框中,我們加入了兩個TextView控件(用來顯示“賬號:”和“密碼:”)以及兩個EditText控件(用來輸入“賬號”和“密碼”),。 如何將這些控件加入到自定義的AlertDialog對話框中呢,? 首先,我們需要創(chuàng)建一個xml布局文件來加載這些控件,。這里,,我創(chuàng)建了一個名為“l(fā)ogindialog.xml”的布局文件。在該布局文件中完成對上述四個控件的布局即可,,具體的實現(xiàn)方法如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas./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文件動態(tài)加載并轉(zhuǎn)化為View對象,然后通過AlertDialog.Builder類的setView()方法將該View對象加載進來,,就可以完成自定義AlertDialog對話框的創(chuàng)建了,。具體的實現(xiàn)方法如下: 1 /* 2 * Function : 構(gòu)造函數(shù) 3 * Param : context上下文對象 4 * Author : 博客園-依舊淡然 5 */ 6 public LoginDialog (Context context) { 7 8 this.mContext = context; 9 10 //動態(tài)加載布局生成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 //創(chuàng)建一個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中的內(nèi)容,,判斷后用以進行下一步的操作。
4.帶進度條的對話框ProgressDialog 在如圖2所示的登錄界面中,,輸入正確的用戶名和密碼之后,,點擊“確定”,將跳轉(zhuǎn)到登錄等待界面,,如圖3所示,。
圖3 登錄等待界面 顯然可見,在圖3所示的登錄等待界面中有一個圓形的進度條(當(dāng)然也可以加載一個長條形的進度條),。要顯示一個如圖3所示的帶進度條的對話框也很簡單,,創(chuàng)建一個ProgressDialog對象并調(diào)用ProgressDialog類的show()方法進行顯示即可。 ProgressDialog類的show()方法有四種形式,,如圖4所示,。
圖4 ProgressDialog類的show()方法 這里,我們選用最后一種方式實現(xiàn)帶進度條的對話框的顯示,,具體實現(xiàn)方法如下: 1 //顯示一個帶進度條的對話框 2 //Author : 博客園-依舊淡然 3 mProgressDialog = ProgressDialog.show(mContext, "請等待", "正在登錄......", true); 通過以上的方法,,就可以顯示出來一個如圖3所示的帶有進度條的對話框了。
相關(guān)資料: Android對話框(Dialog)大全 http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html Android的AlertDialog詳解 http://www./kf/201205/131876.html Android開發(fā)中Dialog對話框的使用 http://www./html/2011-12-1/20111211018584013.htm AlertDialog中獲取控件的值 http://blog.163.com/ygq_hcl/blog/static/16242380520122815815902/
|
|