dialog翻译

2019-07-14 00:09发布

http://blog.csdn.net/akon_vm/article/details/7429979 出处
一个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语句: [java] view plaincopy
  1. protected Dialog onCreateDialog(int id) {  
  2.     Dialog dialog;  
  3.     switch(id) {  
  4.     case DIALOG_PAUSED_ID:  
  5.         // do the work to define the pause Dialog  
  6.         break;  
  7.     case DIALOG_GAMEOVER_ID:  
  8.         // do the work to define the game over Dialog  
  9.         break;  
  10.     default:  
  11.         dialog = null;  
  12.     }  
  13.     return dialog;  
  14. }  

注意:在以上例子中,在case分支语句中并没有代码,因为本节还没有讲述定义Dialog的处理过程。 接下来,是时候去显示一个dialog了,请调用showDialog(int),并传递给它一个dialog的ID。 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。 如何使用dismiss监听器 如果你想让你的应用程序在dialog消失的过程中做一些事,你就应该为你的Dialog绑定一个on-dismiss监听器。 首先,定义DialogInterface.OnDismissListener接口。这个接口只有一个方法—— onDismiss(DialogInterface),在dialog消失后,系统就会呼叫这个方法。然后把你的实现了 OnDismissListener接口的对象传递给setOnDismissListener()。 然后,值得注意的是dialog也能够够取消(be cancelled)。这是一种标识dialog被用户显示取消的特殊情况。当用户按下了返回键或者关闭了这个dialog或者应用程序员显示的调用了 cannel()时(可能在dialog中的“Cancel”按钮被按下的处理方法中调用的),就会发生这种情况。当一个dialog处在被取消的状态,OnDismissListener也会接收到来自Android的通知,但如果你想Android在这个dialog被显示取消(and not dismissed normally),就得使用setOnCancelListener()方法注册一个 DialogInterface.OnCancelListener。 如何创建一个AlertDialog AlertDialog是Dialog类的扩展类,它可以构建很多中dialog用户界面,Android也建议应用程序员使用AlertDialog完成dialog用户界面的构建。你可以用它构建具有任何一下属性的dialog: A title A text message One, two, or three buttons A list of selectable items(with optional checkboxes or radio buttons) 为了创建一个AlertDialog,你需要使用AlertDialog.Builder子类。使用 AlertDialog.Builder(Context)获得一个Builder,然后使用类的公开方法去定义AlertDialog的所有属性。在你已经完成了对Builder的操作后,呼叫create()方法取回这个AlertDialog对象。 以下内容论述和展示了如何使用AlertDialog.Builder类,定义AlertDialog的各种属性。如果你在onCreateDialog()回调函数中使用下面任何一段代码,你就可以返回你想要显示的具有某些属性的目标Dialog对象。 添加button 如果你想构建一个带有button的dialog,需要调用set...Button()方法。 [java] view plaincopy
  1. AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  2. builder.setMessage("Are you sure you want to exit?")  
  3.        .setCancelable(false)  
  4.        .setPositiveButton("Yes"new DialogInterface.OnClickListener() {  
  5.            public void onClick(DialogInterface dialog, int id) {  
  6.                 MyActivity.this.finish();  
  7.            }  
  8.        })  
  9.        .setNegativeButton("No"new DialogInterface.OnClickListener() {  
  10.            public void onClick(DialogInterface dialog, int id) {  
  11.                 dialog.cancel();  
  12.            }  
  13.        });  
  14. AlertDialog alert = builder.create();  
首先,呼叫setMessage(CharSequence)为dialog添加一条提示消息。然后,开始 method-chaining并且呼叫setCancelable(boolean)函数设置这个dialog为不可取消(用户就不能通过按返回键关闭这个dialog)。使用set...Button()方法添加button,例如,使用接收在button上显示的字符串和对用户按下按钮动作进行处理的DialogInterface.OnClickListener这两个参数的setPositiveButton()方法为dialog添加一个按钮。 注意:不可以在一个dialog上同时添加两个“positive” button。最多可以在一个dialog上添加三个button:positive, neutral, and negative button。 添加列表: 使用setItems()方法为AlertDialog添加一个可供用户选择的列表。 [java] view plaincopy
  1. final CharSequence[] items = {"Red""Green""Blue"};  
  2.   
  3. AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  4. builder.setTitle("Pick a color");  
  5. builder.setItems(items, new DialogInterface.OnClickListener() {  
  6.     public void onClick(DialogInterface dialog, int item) {  
  7.         Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();  
  8.     }  
  9. });  
  10. AlertDialog alert = builder.create();  

  首先,调用setTitle(CharSequence)为dialog添加一个title。然后,调用 setItems()为dialog添加一个list,这个list接收一组items以显示,并且 DialogInterface.OnClickListener对用户的不同选择进行处理。 添加checkboxes和radio buttons 为了创建带有multiple-choice items(checkboxes)或single-choice items(radio buttons)的dialog,需要分别使用setMultiChoiceItems()和setSingleChoiceItems()方法。如果你是在onCreateDialog创建这些可选list,Android就会为你管理这个list的状态。只要这个Activity是active的,这个dialog就会记住之前被用户选中的items,但当用户离开当前Activity,the selection 就会丢失。 注意:为了在用户离开或者暂停Activity时保存selection,在整个Activity的生命周期中,你一定要在的适当的时候sava和restore the setting。如果想要永久保存the selections,就需要使用数据存储技术保存这些setting. 要创建一个带有single-choice items的AlertDialog,可以使用创建带有lists的AlertDialog的代码段,但是,需要用setSingleChoiceItems()代替setItems()。 [java] view plaincopy
  1. final CharSequence[] items = {"Red""Green""Blue"};  
  2.   
  3. AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  4. builder.setTitle("Pick a color");  
  5. builder.setSingleChoiceItems(items, -1new DialogInterface.OnClickListener() {  
  6.     public void onClick(DialogInterface dialog, int item) {  
  7.         Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();  
  8.     }  
  9. });  
  10. AlertDialog alert = builder.create();  

  setSingleChoiceItems()的第二个参数是一个整数值,指示默认默认选中哪个list(zero-based),使用“-1”指示默认情况下不应该选中任何item。   创建ProgressDialog 一个ProcessDialog是一个扩展了的AlertDialog类,一个实例化了ProcessDialog的dialog能够显示一个一个进度条,同时也能够提供buttons,例如取消下载的button。 只要呼叫ProgressDialog.show()就可以打开一个progress dialog。 ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "", "Loading. Please wait...", true); 第一个参数是该应用程序的Context,第二个参数是这个dialog的title(留白),第三个参数是显示在dialog上的字符串,最后一个参数标识这个progress是否是indeterminate(这只和进度条的创建相关,我们将在一下节中讨论)。 进度dialog的默认方格是将进度显示为一个圆环。如果你要创建一个可以显示下载进程的进度条,请阅读一下内容。 显示进度条 要想显示带有动态进度信息的进度条,你需要: 1. 调用ProgressDialog(Context)这个构造函数初始化ProgressDialog。 2. 调用setProgressStyle(int)将进度条的风格设置为STYLE_HORIZONTAL。当然,你也可以给这个dialog设置其它属性,例如在它上面显示一条消息。 3. 当你准备好去显示一个dialog了,可以调用show()方法,或者从onCreateDialog(int)这个回调方法中返回ProgressDialog。 4. 你可以调用并传递一个目前总完成百分比的整数值给setProgress(int),或者调用并传递一个你想要加到目前已完成百分比的整数值给incrementProgressBy(int)。 例如,你可能像这样创建ProgressDialog。 [java] view plaincopy
  1. ProgressDialog progressDialog;  
  2. progressDialog = new ProgressDialog(mContext);  
  3. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  4. progressDialog.setMessage("Loading...");  
  5. progressDialog.setCancelable(false);  

大多数创建progress dialog的代码都会同时创建一个用于更新这个progress dialog的线程。为了完成更新progress dialog的任务,你需要在你的应用程序中再开启一个线程,然后使用Handler对象向Activity的UI线程传递进度信息。如果你还没有熟练使用带有Handler的新加线程,请看下面的新启一个线程更新progress dialog的例子。 包含新启线程的ProgressDialog 这个例子使用一个新启动的线程跟踪进度(实际上只是将数值累加到100)信息,每当有了新的进度,这个新启的线程就使用Handler向主Activity发送一条Message,然后主Acitvity就会更新ProgressDialog。 [java] view plaincopy
  1. package org.vhow.android.ui.dialogs;  
  2.   
  3.   
  4. import android.app.Activity;  
  5.   
  6. import android.app.Dialog;  
  7.   
  8. import android.app.ProgressDialog;  
  9.   
  10. import android.os.Bundle;  
  11.   
  12. import android.os.Handler;  
  13.   
  14. import android.os.Message;  
  15.   
  16. import android.util.Log;  
  17.   
  18. import android.view.View;  
  19.   
  20. import android.view.View.OnClickListener;  
  21.   
  22. import android.widget.Button;  
  23.   
  24. public class Dialogs extends Activity  
  25.