Android Dialog 翻譯文件

鴨脖發表於2012-07-23

導讀:一個dialog通常是指出現在當前Activity前面的小視窗,當dialog出現後,被它部分遮蓋的Activity將失去焦點,一切的使用者操作交由這個dialog處理。

  Android API支援以下型別的Dialog物件:
  AlertDialog -- 允許你在其上新增0、1、2或3個button,而且它還可以包含一個提供了可選項(如checkboxes或radio buttons等)的列表。正確的使用AlertDialog可以構建大多數Dialog介面。
  ProgressDialog -- 用於顯示一個progress wheel或者一個progress bar.ProgressDialog是一個別擴充套件了的AlertDialog,所以它自然也允許你在其上新增button。
  DatePickerDialog -- 允許使用者選擇時間的dialog。
  TimePickerDialog -- 允許使用者選擇時間的dialog。
  如何顯示一個Dialog
  一個dialog常常作為一個Activity的一部分被建立和顯示。你應該在你建立的Activity的 onCreateDialog(int)這個回撥函式中建立dialog。當你使用這個回撥函式,Android系統就會自動管理每個dialog的狀態並且建立每個dialog和對應Activity之間的連線,使對應的Activity成為對應dialog的“owner”。這樣,每個dialog就從Activity繼承了某些屬性。例如,當一個dialog處於open狀態時,使用者按下Menu鍵就會顯示你為這個Activity定義的menu。
  注意:如果你決定在onCreateDialog()外面建立一個dialog,Android系統不會把它“貼上” 到某個Activity上。如果需要,你可以使用setOwnerActivity(Activity)方法將一個dialog“貼上”到一個 Activity上。
  當你想要顯示一個dialog時,請呼叫showDialog(int)方法,並且傳遞給它一個能唯一標識你想要顯示的dialog的整數。
  當一個dialog第一次被請求的時候,Android系統會呼叫你的Activity中的 onCreateDialog(int)方法,你要在這個方法體裡例項化一個Dialog。onCreateDialog和showDialog一樣,都需要你傳遞給它們一個dialog ID。在你建立完一個Dialog物件後,請讓onCreateDialog方法返回一個Dialog物件的引用。
  在dialog被顯示之前,Android也會呼叫onPrepareDialog(int, Dialog)。這個方法是可選的,如果你想在每次開啟dialog時改變它任何樹形,你就需要定義這個方法。每次dialog別開啟時,Android 都會呼叫onPrepareDialog(int, Dialog),而只有當dialog是被第一次開啟時才呼叫onCreateDialog(int)。如果你比重寫
  接上頁
  onPrepareDialog(int, Dialog),dialog就會呈現使用者上一次開啟它時的狀態。這個方法也需要你傳遞給它一個dialog的ID,同時還需要你傳遞給它一個你使用 onCreateDialog()方法建立並返回的Dialog物件的引用。
  最好的定義 onCreateDialog(int)和onPrepareDialog(int, Dialog) 這兩個回撥函式的方法是使用switch語句檢測被傳入的id實參。每個case應該檢測一個惟一的dialog ID,然後建立和定義各自的Dialog物件。例如,假設需要兩個不同對話方塊的一個遊戲程式,一個對話方塊指示這個遊戲已被暫停,兩一個指示遊戲結束。
  首先,為每個dialog定義一個ID:
  view plaincopy to clipboardprint?
  static final int DIALOG_PAUSE_ID = 0;
  static final int DIALOG_GAMEOVER_ID = 1;
  static final int DIALOG_PAUSE_ID = 0;
  static final int DIALOG_GAMEOVER_ID = 1;
  然後,定義onCreateDialog(int)方法,其中應該包含用於區別不同dialog ID的switch語句:

01 view plaincopy to clipboardprint?
02 protected Dialog onCreateDialog(int id)
03 {
04 Dialog dialog;
05 switch (id)
06 {
07 case DIALOG_PAUSE_ID:
08 // do the work to define the pause Dialog
09 break
10 case DIALOG_GAMEOVER_ID:
11 // do the work to define the game over Dialog
12 break
13 default
14 dialog = null
15 }
16 return dialog;
17 }
18 protected Dialog onCreateDialog(int id)
19 {
20 Dialog dialog;
21 switch (id)
22 {
23 case DIALOG_PAUSE_ID:
24 // do the work to define the pause Dialog
25 break
26 case DIALOG_GAMEOVER_ID:
27 // do the work to define the game over Dialog
28 break
29 default
30 dialog = null
31 }
32 return dialog;
33 }

  注意:在以上例子中,在case分支語句中並沒有程式碼,因為本節還沒有講述定義Dialog的處理過程。
  接下來,是時候去顯示一個dialog了,請呼叫showDialog(int),並傳遞給它一個dialog的ID。
  接上頁
  view plaincopy to clipboardprint?
  showDialog(DIALOG_PAUSED_ID);
  showDialog(DIALOG_PAUSED_ID);
  如何讓一個Dialog消失
  當你打算關閉一個dialog,可以呼叫Dialog物件成員方法dismiss()方法來打發它。如果有必要,你可以從為你呼叫dismiss()的Activity中呼叫dismisDialog(int)。
  如果你正在使用onCreateDialog(int)去管理dialog的狀態,那每次你的dialog消失後,Activity就持有Dialog物件的狀態資訊。如果你真的不再需要這個Dialog物件,或者你真的需要清除這個狀態,那你應該呼叫 removeDialog(int)。這個方法會擦除所有與這個物件相關的內部引用,並且如果dialog正在被顯示,這個方法會dismiss這個 dialog。

相關文章