在以前的学习过程当中咱们已经知道,Android应用中最经常使用的屏幕显示开发是基于Activity的,可是,在不少状况下咱们须要显示一个对话框或浮动窗体来完成一些简单的任务,好比须要让用户输入一些内容,或让用户确认一些信息。 在Android中,咱们能够经过两种方式来建立对话框: 1. 借助Dialog类,或它的子类(如AlertDialog) 2. 使用Activity的对话框主题 使用Dialog类: 让咱们先来看下如何借助Dialog类建立对话框,首先,咱们须要定义一个继承了Dialog类的子类:php
class MyDialog extends Dialog { public MyDialog(Context context) { super(context); } }android
而后,为这个对话框的内容定义一个布局文件,好比:ide
android:id=”@+id/widget28″ android:layout_width=”fill_parent” android:layout_height=”fill_parent” android:orientation=”vertical” xmlns:android=”http://schemas.android.com/apk/res/android”> android:id=”@+id/nameMessage” android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:text=”Enter Name:”> android:id=”@+id/nameEditText” android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:textSize=”18sp”> android:id=”@+id/buttonLayout” android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:layout_gravity=”center_horizontal”> android:id=”@+id/okButton” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”OK”> android:id=”@+id/cancelButton” android:layout_width=”wrap_content” android:layout_height=”wrap_content” android:text=”Cancel”> 接着,将上面这份布局文件应用到咱们的对话框上来:学习 class MyDialog extends Dialog { …. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(”TestApp”, “Dialog created”); setContentView(R.layout.mydialog); } }ui 如今,咱们就能够调用这个对话框类的show方法来让它显示:this … MyDialog dialog = new MyDialog(context); dialog.show(); …xml 对话框组件的事件处理机制和Activity是相同的,让咱们来看下如何处理对话框中的OK和Cancle按钮的事件:对象 class MyDialog extends Dialog implements OnClickListener { private Button okButton; private Button cancelButton; private EditText nameEditText; protected void onCreate(Bundle savedInstanceState) { okButton = (Button) findViewById(R.id.okButton); cancelButton = (Button) findViewById(R.id.cancelButton); nameEditText = (EditText) findViewById(R.id.nameEditText); okButton.setOnClickListener(this); cancelButton.setOnClickListener(this); }继承 public void onClick(View view) { switch (view.getId()) { case R.id.okButton: dismiss(); break; case R.id.cancelButton: cancel(); break; } } } 在对话框关闭时,对话框类的dismiss()方法将会被调用,该方法能够被对话框自身调用,也能够被其余外部代码调用。 对话框支持“取消”功能,“取消”的含义是指再也不须要执行对话框上的任何功能和动做。对话框的取消能够经过调用cancel()方法来实现。取消对话框也将会自动调用dismiss()方法。 当用户点击手机设备上的“返回”按钮时,屏幕上的对话框将会被取消,若是你想让你的对话框不在这种状况下被取消掉的话,你能够以下设置你的对话框: setCancelable(false); 对话框的取消和关闭事件能够经过OnCancelListener和OnDismissListener两个监听器来被监听处理。 从对话框中返回信息: 如今,到了咱们要从对话框上获取用户输入的值,将它返回到主调的Activity中的时候了。然而, Dialog类并无提供能够直接返回这些值的方法…可是,咱们可使用本身建立的监听类: public interface MyDialogListener { public void onOkClick(String name); public void onCancelClick(); } 咱们的对话框类的构造方法同时须要做一点小小的修改: public MyDialog(Context context, MyDialogListener listener) { super(context); this.listener = listener; } 接着,你就得在建立这个对话框的时候提供一个已经实现了MyDialogListener这接口的监听器实现对象了。 而后,咱们要在对话框的onclick方法中传出这个值: public void onClick(View view) { switch (view.getId()) { case R.id.okButton: listener.onOkClick(nameEditText.getText().toString()); dismiss(); break; case R.id.cancelButton: cancel(); break; } } 使用AlertDialog:AlertDialog类是Dialog类的子类。它默认提供了3个按钮和一个文本消息。这些按钮能够按须要来使他们显示或隐藏。下列代码将建立一个AlertDialog对话框,对话框上将向用户展现一个问题以及备选的yes/no答案: AlertDialog dialog = new AlertDialog.Builder(context).create(); dialog.setMessage(”Do you play cricket?”); dialog.setButton(”Yes”, myOnClickListener); dialog.setButton2(”No”, myOnClickListener); dialog.show(); myOnClickListener这个事件监听器的代码能够相似以下: public void onClick(DialogInterface dialog, int i) { switch (i) { case AlertDialog.BUTTON1: break; case AlertDialog.BUTTON2: break; } } AlertDialog.Builder:AlertDialog类中有一个内部类,名为‘Builder’,Builder类提供了为对话框添加多选或单选列表,以及为这些列表添加事件处理的功能。另外,这个Builder类将AlertDialog对话框上的3个按钮按照他们的位置分别称呼为:PositiveButton, NeutralButton, NegativeButton 下列代码是一个多选列表的例子: new AlertDialog.Builder(context) .setIcon(R.drawable.icon) .setTitle(R.string.alert_dialog_multi_choice) .setMultiChoiceItems( R.array.select_dialog_items, new boolean[]{false, true, false, true, false}, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { } }).setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }).setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } } ).create(); Activity托管对话框:Android也提供了建立对话框的快捷方式,在Activity中能够经过如showDialog(), onCreateDialog(), onPrepareDialog(),dismissDialog(), removeDialog()等方法来建立和管理对话框。 Activity的onCreateDialog方法用于在建立并显示对话框的时候调用,好比: @Override protected Dialog onCreateDialog(int id) { return new AlertDialog.Builder(this).setMessage(”How are you?”).setPositiveButton( ”Fine”, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).setNegativeButton(”Not so good”, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } } ).create(); } 你能够同时建立多个对话框,经过为他们设置id参数来区分它们,而后能够经过 showDialog(id)方法来显示。 onCreateDialog方法只会在第一次调用showDialog方法时才会被调用,在以后的showDialog()的调用中,对话框不是被新建出来的,而是直接显示以前建立过的那些对话框。 若是你想要更新对话框的内容,你只要在 onPrepareDialog()中做相应的工做就能够了,该方法会在对话框显示以前进行调用。 dismissDialog()方法是用来关闭对话框的;removeDialog()方法用来将对话框从Activity的托管中移除(若是对已经移除的对话框从新进行调用showDialog ,则该对话框将进行从新建立)。 使用Dialog主题: 另一种简单的显示对话框的方式是让Activity以Dialog的方式来工做(伪装?) ,这种Activity被称做浮动Activity。这种Activity能够经过配置它的主题来实现,咱们能够在AndroidManifest.xml中进行相似以下的配置: … 这样,该Activity就会应用了 ‘Theme.Dialog’的主题而看起来像对话框了。 原文:http://www.fulema.com/viewthread.php?tid=13&extra=page%3D1 布局
接着,将上面这份布局文件应用到咱们的对话框上来:学习
class MyDialog extends Dialog { …. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(”TestApp”, “Dialog created”); setContentView(R.layout.mydialog); } }ui
如今,咱们就能够调用这个对话框类的show方法来让它显示:this
… MyDialog dialog = new MyDialog(context); dialog.show(); …xml
对话框组件的事件处理机制和Activity是相同的,让咱们来看下如何处理对话框中的OK和Cancle按钮的事件:对象
class MyDialog extends Dialog implements OnClickListener { private Button okButton; private Button cancelButton; private EditText nameEditText; protected void onCreate(Bundle savedInstanceState) { okButton = (Button) findViewById(R.id.okButton); cancelButton = (Button) findViewById(R.id.cancelButton); nameEditText = (EditText) findViewById(R.id.nameEditText); okButton.setOnClickListener(this); cancelButton.setOnClickListener(this); }继承
public void onClick(View view) { switch (view.getId()) { case R.id.okButton: dismiss(); break; case R.id.cancelButton: cancel(); break; } } }
在对话框关闭时,对话框类的dismiss()方法将会被调用,该方法能够被对话框自身调用,也能够被其余外部代码调用。 对话框支持“取消”功能,“取消”的含义是指再也不须要执行对话框上的任何功能和动做。对话框的取消能够经过调用cancel()方法来实现。取消对话框也将会自动调用dismiss()方法。 当用户点击手机设备上的“返回”按钮时,屏幕上的对话框将会被取消,若是你想让你的对话框不在这种状况下被取消掉的话,你能够以下设置你的对话框:
setCancelable(false);
对话框的取消和关闭事件能够经过OnCancelListener和OnDismissListener两个监听器来被监听处理。 从对话框中返回信息: 如今,到了咱们要从对话框上获取用户输入的值,将它返回到主调的Activity中的时候了。然而, Dialog类并无提供能够直接返回这些值的方法…可是,咱们可使用本身建立的监听类:
public interface MyDialogListener { public void onOkClick(String name); public void onCancelClick(); }
咱们的对话框类的构造方法同时须要做一点小小的修改:
public MyDialog(Context context, MyDialogListener listener) { super(context); this.listener = listener; }
接着,你就得在建立这个对话框的时候提供一个已经实现了MyDialogListener这接口的监听器实现对象了。 而后,咱们要在对话框的onclick方法中传出这个值:
public void onClick(View view) { switch (view.getId()) { case R.id.okButton: listener.onOkClick(nameEditText.getText().toString()); dismiss(); break; case R.id.cancelButton: cancel(); break; } }
使用AlertDialog:AlertDialog类是Dialog类的子类。它默认提供了3个按钮和一个文本消息。这些按钮能够按须要来使他们显示或隐藏。下列代码将建立一个AlertDialog对话框,对话框上将向用户展现一个问题以及备选的yes/no答案:
AlertDialog dialog = new AlertDialog.Builder(context).create(); dialog.setMessage(”Do you play cricket?”); dialog.setButton(”Yes”, myOnClickListener); dialog.setButton2(”No”, myOnClickListener); dialog.show();
myOnClickListener这个事件监听器的代码能够相似以下:
public void onClick(DialogInterface dialog, int i) { switch (i) { case AlertDialog.BUTTON1: break; case AlertDialog.BUTTON2: break; } }
AlertDialog.Builder:AlertDialog类中有一个内部类,名为‘Builder’,Builder类提供了为对话框添加多选或单选列表,以及为这些列表添加事件处理的功能。另外,这个Builder类将AlertDialog对话框上的3个按钮按照他们的位置分别称呼为:PositiveButton, NeutralButton, NegativeButton 下列代码是一个多选列表的例子:
new AlertDialog.Builder(context) .setIcon(R.drawable.icon) .setTitle(R.string.alert_dialog_multi_choice) .setMultiChoiceItems( R.array.select_dialog_items, new boolean[]{false, true, false, true, false}, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { } }).setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }).setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } } ).create();
Activity托管对话框:Android也提供了建立对话框的快捷方式,在Activity中能够经过如showDialog(), onCreateDialog(), onPrepareDialog(),dismissDialog(), removeDialog()等方法来建立和管理对话框。 Activity的onCreateDialog方法用于在建立并显示对话框的时候调用,好比:
@Override protected Dialog onCreateDialog(int id) { return new AlertDialog.Builder(this).setMessage(”How are you?”).setPositiveButton( ”Fine”, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).setNegativeButton(”Not so good”, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } } ).create(); }
你能够同时建立多个对话框,经过为他们设置id参数来区分它们,而后能够经过 showDialog(id)方法来显示。 onCreateDialog方法只会在第一次调用showDialog方法时才会被调用,在以后的showDialog()的调用中,对话框不是被新建出来的,而是直接显示以前建立过的那些对话框。 若是你想要更新对话框的内容,你只要在 onPrepareDialog()中做相应的工做就能够了,该方法会在对话框显示以前进行调用。 dismissDialog()方法是用来关闭对话框的;removeDialog()方法用来将对话框从Activity的托管中移除(若是对已经移除的对话框从新进行调用showDialog ,则该对话框将进行从新建立)。 使用Dialog主题: 另一种简单的显示对话框的方式是让Activity以Dialog的方式来工做(伪装?) ,这种Activity被称做浮动Activity。这种Activity能够经过配置它的主题来实现,咱们能够在AndroidManifest.xml中进行相似以下的配置:
…
这样,该Activity就会应用了 ‘Theme.Dialog’的主题而看起来像对话框了。
原文:http://www.fulema.com/viewthread.php?tid=13&extra=page%3D1