Dialogs(对话框)
Posted yh_android_blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dialogs(对话框)相关的知识,希望对你有一定的参考价值。
概述
对话框是一个小的窗口用以提示用户做出决定或输入额外的信息。对话框不会填满屏幕并且通常被用作模态事件,要求用户做出行动才能继续下去。 对话框设计:关于如何设计你的对话框,包括一些建议,请阅读 Dialogs 设计向导。 Dialog类是对话框的基类,你应该避免直接实例化 Dialog。改为使用如下的一个子类:AlertDialog
DatePickerDialog
or
TimePickerDialog
这些类为你的对话框定义了样式和结构,但是你应 为你的对话框 该使用 DialogFragment作为容器。 DialogFragment类提供你需要创建你的对话框的所有控制并且管理它的显示,替代在 Dialog对象中调用方法。 使用 DialogFragment管理对话框,来确保正确的处理生命周期事件,如当用户按下返回按钮或旋转屏幕。 DialogFragment类允许你重用该对话框的UI在大的UI中作为可嵌入的组件,就像传统的fragment一样(如在大屏幕和小屏幕上显示不同的对话框UI)。 这篇文章接下来的章节描述了如何结合一个
AlertDialog
对象来使用
DialogFragment。如果你想创建一个日期或时间选择器,你应该去阅读
Pickers(选择器)。
注:因为该
DialogFragment类在安卓3.0才加入进来,该文章描述的如何使用
DialogFragment类是由
Support Library提供的。在你的应用中加入该库,你可以使用
DialogFragment并且各类可在安卓1.6或更高版本上运行的API。如果你的应用支撑的最低版本是API 11或更高,你可以在使用框架版本的
DialogFragment,但是要注意在该文件中的关于支持库API的链接。当使用了支持库,确保你import的是
android.support.v4.app.DialogFragment 而不是
android.app.DialogFragment
.。
创建对话框碎片(Dialog Fragment)
你可以实现一个广义上的对话框设计——包括自定义布局和在 Dialogs设计向导中的描述——通过继承 DialogFragment并且在 onCreateDialog()回调函数中 创建一个 AlertDialog。 例如,这里有个基本的 AlertDialog 通过DialogFragment
:管理的:
public class FireMissilesDialogFragment extends DialogFragment
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.dialog_fire_missiles)
.setPositiveButton(R.string.fire, new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int id)
// FIRE ZE MISSILES!
)
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int id)
// User cancelled the dialog
);
// Create the AlertDialog object and return it
return builder.create();
现在,当你创建了一个该类的引用并且在该对象中调用了 show(),该对话框便会显示出来,如图1. 下面的章节描述了更多关于使用 AlertDialog.BuilderAPI来创建对话框的方法。 取决于如何组合你的对话框,你可以实现 DialogFragment中的各种回调方法,包括所有基于fragment生命周期的方法。
创建警告对话框(Alert Dialog)
AlertDialog类允许你创建和设计各种各样的对话框,并且总有一个对话框是你需要的。如图2所示,alert dialog上有三个区域:
1.标题 这是一个可选项并且仅当内容被详细消息,一个列表或自定义布局占用时使用。如果你希望说明一个简单的消息或问题(例如图1的对话框),则不需要标题。
2. 内容区域 这里可以展示消息,列表或其它自定义不布局
3.操作按钮 在一个对话框中不超过个三个操作按钮
AlertDialog.Builder类提供API来让你创建一个 AlertDialog和这些内容,包括自定义布局。
为创建一个
AlertDialog
::
接下来的话题展示了如何定义不同的属性,通过使用 AlertDialog.Builder类。// 1. 通过它的构造器实例化一个 AlertDialog.Builder
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// 2.将设置方法都集合在一起来设置对话框的属性
builder.setMessage(R.string.dialog_message)
.setTitle(R.string.dialog_title);
// 3. 从create()中获得
AlertDialogAlertDialog dialog = builder.create();
添加按钮
添加按钮变为图2所示,调用setPositiveButton()
和
setNegativeButton()方法
:
set...Button() methods 方法请求一个按钮的标题(由string资源文件提供)和一个AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Add the buttons
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int id)
// User clicked OK button
);
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int id)
// User cancelled the dialog
);
// Set other dialog properties
...
// Create the AlertDialog
AlertDialog dialog = builder.create();
DialogInterface.OnClickListener
,该监听器定义了当用户点击该按钮时的操作。
这里有三种不同的操作按钮可以添加: Positive
你可以使用它来执行同样和继续操作("OK'按钮)
Negative 你可以使用它来执行取消操作
Neutral 你应该在用户可能不希望继续操作时使用这个,但并不是一定要取消。它显示在postive和negative按钮之间。例如,该操作获取是“之后再提醒我”
这三种操作按钮可以都添加一个在
AlertDialog
.中。也就是说,不能有多个“positive”按钮。
添加列表
在 AlertDialogAPI中有三种类型的列表可用:
- 一个传统的单选列表
- 一个持续的单选列表(单选按钮)
- 一个持续的多选列表(复选框)
- //持续的说明可以保存选项
因为列表是显示在对话框的文本区,对话框无法同时显示一个消息和列表,并且你应该为对话框设置标题,通过 setTitle()。为列表指定列表项,调用 setItems(),传递一个数组。或者,你可以使用 setAdapter() 指定一个列表。使用 ListAdapter 允许你用 动态数据(例如数据库中的数据)返回列表。 如果你选择用@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.pick_color)
.setItems(R.array.colors_array, new DialogInterface.OnClickListener()
public void onClick(DialogInterface dialog, int which)
// which 变量包含了被选中项的索引值
);
return builder.create();
ListAdapter
,返回你的列表,经常使用一个
Loader来异步加载内容。这些在
Building Layouts with an Adapter
和
Loaders开发向导中详细的讲解了。
注:默认的,触摸一个列表项将会消失该对话框,除非你使用一个持久的选择列表。
添加一个持久的复选/单选列表
为了添加一个持续的复选项(checkbox)或单选项(radio button),分别使用
setMultiChoiceItems()
或
setSingleChoiceItems()
方法。
例如,这里展示了如何创建一个像图4一样的复选列表,并且存储了被选中项在
ArrayList
:中:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
mSelectedItems = new ArrayList(); //跟踪被选项的地方
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// 设置对话框标题
builder.setTitle(R.string.pick_toppings)
// 指定列表数组, 默认被选中项t (null for none),和选择项目时的监听器
.setMultiChoiceItems(R.array.toppings, null,
new DialogInterface.OnMultiChoiceClickListener()
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked)
if (isChecked)
// 如果用户选中了项目,将它加入被选择项
mSelectedItems.add(which);
else if (mSelectedItems.contains(which))
// 否则,如果项目已经在数组中,移除它
mSelectedItems.remove(Integer.valueOf(以上是关于Dialogs(对话框)的主要内容,如果未能解决你的问题,请参考以下文章
Delphi XE5 Android Dialogs 对话框(模拟做了一套)