Android Dialog 翻译文档

导读:一个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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值