Dialog 的一些回調處理

1、AlertDialog,具有0-3個按鈕,可以放選項、複選框單選框等,以建議的方式域用戶交互可以。
2、ProgressDialog,顯示一個進度的圓環或者進度條。
3、DataPickerDialog,選擇日期的dialog。
4、TimePickerDialog,選擇時間的dialog。

用戶可以繼承Dialog類或者它的子類並且創建一個新的leyout。

Showing a Dialog

Dialog總是作爲一個Activity的一部分來創建和顯示的。正常可以使用Activity的onCreateDialog(int)回調函數來創建Dialog。使用這個回調函數的時候,系統會自動管理每個dialog的狀態,並把它們關聯到這個Activity,有效的使它成爲dialog的所有者。這樣每個第啊咯個都從父Activity繼承一些屬性。For example, when a dialog is open, the Menu key reveals the options menu defined for the Activity and the volume keys modify the audio stream used by the Activity.
注意:如果你在onCreate()之外創建dialog,他不會附屬於任何的Activity,可以使用dialog的setOwnerActivity(Activity)來設置。
當想顯示一個dialog的時候,調用showDialog(int),並傳遞一個整數來唯一標識想要顯示的dialog即可。
當第一次使用一個dialog的時候,Android會調用onCreateDialog(int),應該在這裏創建dialog。這個回調方法的參數是你傳遞給showDialog(int)的id。創建Dialog結束後,返回這個dialog對象。
在現實一個dialog之前,Android會先用可選的回調非法onPrepareDialog(int)。如果想在每次打開dialog的時候改變它的屬性就可以通過重寫這個方法來實現。他會在每次打開dialog的時候被調用,而onCreateDialog(int)只在第一次打開一個dialog的時候調用。如果不定義onPrepareDialog(),那麼dialog將保持塌方上次被打開的屬性。This method is also passed the dialog's ID, along with the Dialog object you created in onCreateDialog()。

創建Dialog的Example:

 

顯示創建的dialog:showDialog(DIALOG_PAUSED_ID);

Dismissing a Dialog

當準備關閉dialog的時候,可以調用dialogobject的dismiss()方法。如果必要,可以調用Activity的dismissDialog(int),它會有效的調用dialog的dismiss()。
如果你使用onCreateDialog(int)來管理dialog的狀態,那麼每次關閉dialog的時候,dialog的狀態都會被Activity保存。如果這個dialog不會再次被使用或者清除它的狀態很重要,可以調用removeDialog(int),這回清除內部任何對它的引用,如果它正在顯示,會被關閉。

Using dismiss listeners

如果想在dialog被關閉的時候執行一些操作,應該爲dialog設置on-dismiss listener。

首先定義DialogInterfacev.OnDismissListener接口。這個接口只有一個方法,vonDismiss(DialogInterface),當關閉dialog的時候會調用這個方法。把OnDismissListener的實現傳遞給setOnDismissListener()就可以了。
注意,dialog可以被取消。這是由用戶顯示取消dialog的特殊情況,在用戶點擊back鍵或者顯示調用cancel()函數就是這種情況。當dialog被cancel的時候,OnDismissListener不會被通知,如果你想知道dialog被顯示的cancel(不是正常的關閉),那麼你應該用setOnCancel()註冊一個vDialogInterface.OnCancelListener。

Creating an AlertDialog
AlertDialog是Dialog的子類,它可以構造用戶交互的多數dialog,是建議的dialog類型。下列情況可以使用AldertDialog:
A tittle;
A text message;
One,two,or three buttons;
A list of selectable items (with optional checkboxes or radio buttons)

可以使用AlertDialog.Builder的子類來創建AlertDialog。通過AlertDialogBuilder(Context)來創建一個builder並使用這個builder的public方法來定義AlertDialog的所有屬性。在使用builder創建結束後,使用create()來得到創建的AlertDialog對象。

The following topics show how to define various properties of the AlertDialog using the AlertDialog.Builder class. If you use any of the following sample code inside your onCreateDialog() callback method, you can return the resulting Dialog object to display the dialog.

Adding buttons

 

注意:每種類型的按鈕只能添加一個。這限制了按鈕的個數(3個)。這些名字於其功能無關只用來幫助你記住這些按鈕是幹嘛的。

 

可以用vsetMultiChoiceitems()和setSingleChoiceItems()來在AlertDialog上設置多選或者單選列表。如果使用onCreateDialog()創建這些選項列表,那麼Android會維護這個選項列表的狀態。在Activity存活期間,這個dialog會記住先前的選項狀態,但是當用戶利卡這個Activity時,選項狀態就會丟失。
注意:爲了在用戶退出或者暫停這個Activity時保存選項狀態,你必須在整個Activity的生命週期中恰當的保存和恢復選項狀態。爲了永久的保存選項狀態(甚至在Activity進程完全結束之後),你應該使用數據存儲技術來保存選項狀態。

To create an AlertDialog with a list of single-choice items like the one shown to the right, use the same code from the previous example, but replace the setItems() method with setSingleChoiceItems():

 

在setSingleChoiceItems()的第二個參數是一個整形表示哪個item被選中,item的標識從0開始,-1表示沒有item默認被選中。

Creating a ProgressDialog
ProgressDialog是AlertDialog的子類,可以顯示進度動畫:用旋轉的環表示進度未定義的task;用進度條表示定義了進度的task。這個dialog也可以提供按鈕,比如下載過程中的取消按鈕。
打開一個進度dialog簡單到只要調用ProgressDialog.show()就可以了。
比如:
ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "", 
"Loading. Please wait...", true);
第一個參數是程序的context, 第二個參數是tittle,第三個是message, 第三個參數表示這個progress時候是不清楚的(它只在創建進度條的時候有意義, which is discussed in the next section).

Showing a progress bar
顯示一個用動畫表示進度的進度條:
1、用構造方法ProgressDialog(Context)初始一個ProgressDialog。
2、用setProgressStyle(int)設置style爲STYLE_HORIZONTAL,並設置其他的屬性,比如message等。
3、準備顯示dialog的時候調用show()或者使用onCreateDialog(int)來返回這個ProgressDialog。
4、可以調用setProgress(int)傳遞目前完成的全部百分比或者vincrementProgressBy(int)傳遞增量值來增加進度條顯示的進度。

比如:

 

設置ProgressDialog很簡單,創建ProgressDialog的多數代碼多數是用來更新它的。你會發現需要使用Handler來創建新的線程來進行這項工作並把進度反映到Activity的UI上。

Example ProgressDialog with a second thread
This example uses a second thread to track the progress of a process (which actually just counts up to 100). The thread sends a Message back to the main Activity through a Handler each time progress is made. The main Activity then updates the ProgressDialog.

 

Creating a Custom Dialog

如果需要一個自定義設計的dialog,你可以創建自己的layout。定義好layout後,傳遞root View對象或者leyout資源ID給setContentView(View)。
例如:
1、創建XML layout:

 

2、設置這個layout爲這個dialog的內容    並定義ImageView和TextView的內容。 

在初始化dialog後,使用setContentView(int)設置自定義的layout爲dialog的content view。這時這個dialog已經定義好了layout,你可以使用dialog的findViewByID(int)來從layout中得到View對象,並修改其中的內容。
3、好了,現在你可以顯示這個dialog了。

通過基類Dialog創建的dialog的必須有tittle,如果不調用setTittle(),那麼tittle的空間會空着而且可見。如果你根本不需要tittle,那麼應該使用AlertDialog來創建自定義的dialog。因爲使用AlertDialog.Builder來創建AlertDialog更容易,你也不需要訪問vsetContentView(int)而是用setView(View)。它接受一個View對象參數,所以你需要inflate the layout's root View object from XML。
To inflate the XML layout,使用getLayoutInflater()或者getSystemService()得到LayoutInflater,然後調用inflate(int, ViewGroup)(第一個參數是layout的資源ID,第二個是root view的標識符)。至此,你可以用這個inflated layout來得到layout中的View對象並且定義其中的內容了。然後初始AlertDialog.Builder並setView爲這個inflated layout。
例如:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章