Dialog类实现为一个简单的漂浮窗口,完全在Activity中创建。使用基本的Dialog类,你可以创建一个新的实例并设定标题和布局,如下所示:

Dialog d = new Dialog(MyActivity.this);

// Have the new window tint and blur the window it

// obscures.

Window window = d.getWindow();

window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND, WindowManager.LayoutParams.FLAG_BLUR_BEHIND);

d.setTitle(“Dialog Title”);

d.setContentView(R.layout.dialog_view);

TextView text = (TextView)d.findViewById(R.id.dialogTextView);

text.setText(“This is the text in my dialog”);

一旦按照你的喜好完成配置,使用下面的方法显示它。

d.show();

AlertDialog类

AlertDialog类是最通用的Dialog实现之一。它提供了一些选项来让你对于最通用的对话框使用情形构建屏幕,包括:

❑ 提供1-3个可选按钮来向用户表达信息。这个功能可能和你在任何桌面编程中的经历相似,显示的按钮一般从OK、Cancel、Yes和No中选择。

❑ 以checkbox或radio Button的方式提供选项列表。

❑ 提供一个供用户输入的文本输入框。

创建一个AlertDialog UI,通过创建一个AlertDialog.Builder对象,如下所示:

AlertDialog.Builder ad = new AlertDialog.Builder(context);

然后,你可以设定显示的标题和信息,以可选的形式设定使用的按钮,选择项和用户输入框。还包括设定时间监听来处理用户交互。

接下来的代码给出了一个新的AlertDialog的例子,用于显示一个信息并提供两个按钮选项供选择。点击任何一个按钮,在执行完附加的Click Listener后自动关闭。

Context context = MyActivity.this;

String title = “It is Pitch Black”;

String message = “You are likely to be eaten by a grue.”;

String button1String = “Go Back”;

String button2String = “Move Forward”;

AlertDialog.Builder ad = new AlertDialog.Builder(context);

ad.setTitle(title);

ad.setMessage(message);

ad.setPositiveButton(button1String, new OnClickListener() {

public void onClick(DialogInterface dialog, int arg1) {

eatenByGrue();

}

});

ad.setNegativeButton(button2String, new OnClickListener(){

public void onClick(DialogInterface dialog, int arg1) {

// do nothing

}

});

ad.setCancelable(true);

ad.setOnCancelListener(new OnCancelListener() {

public void onCancel(DialogInterface dialog) {

eatenByGrue();

}

});

为了显示已经创建的AlertDialog,调用show方法。

ad.show();

可变通的,你可以在Activity中重写onCreateDialog和onPrepareDialog方法来创建单实例的对话框来保持它们的状态。这个技巧将在本章的后面进行尝试。

特殊的输入Dialog

对话框的一个主要用途是提供用户输入的界面。Android包含一些特殊的对话框,它们封装了控件为通用的用户输入请求提供了便利。它们包括以下的:

❑ DatePickerDialog

让用户从DatePicker View中选择一个日期。构造函数包含一个回调Listener,用来提示调用的Activity日期设定结束。

❑ TimePickerDialog

和DatePickerDialog相似,这个对话框让用户从一个TimePicker View中选择一个时间。

❑ ProgressDialog

一个在消息文本框下显示了一个进度条的对话框。常用于在一个耗时的操作中,让用户了解进行的进度。

使用和管理Dialog

与其在每次需要的时候创建新的对话框实例,不如利用Android提供的onCreateDialog和onPrepareDialog事件处理函数。在Activity中,通过这些处理函数来维护和管理对话框实例。

通过重写onCreateDialog方法,你可以设定需要创建的对话框,当调用showDialog时,显示指定的对话框。和给出的代码片段一样,重写的方法包含一个switch语句来决定哪个对话框需要使用:

static final private int TIME_DIALOG = 1;

@Override

public Dialog onCreateDialog(int id) {

switch(id)

{

case (TIME_DIALOG) :

AlertDialog.Builder timeDialog = new AlertDialog.Builder(this);

timeDialog.setTitle(“The Current Time Is...”);

timeDialog.setMessage(“Now”);

return timeDialog.create();

}

return null;

}

完成初始化的创建后,每次showDialog的调用都会触发onPrepareDialog处理函数。通过重写这个方法,你可以在对话框显示之前及时地修改它。在onPrepareDialog方法里,你可以实时的修改任何显示的值,如下面的片段所示,指定当前的时间给上面创建的对话框:

@Override

public void onPrepareDialog(int id, Dialog dialog) {

switch(id) {

case (TIME_DIALOG) :

SimpleDateFormat sdf = new SimpleDateFormat(“HH:mm:ss”);

Date currentTime;

currentTime = new Date(java.lang.System.currentTimeMillis());

String dateString = sdf.format(currentTime);

AlertDialog timeDialog = (AlertDialog)dialog;

timeDialog.setMessage(dateString);

break;

}

}

一旦你重写了这些方法,你可以通过调用showDialog来显示对话框,如下所示。传入你想显示的对话框的ID,Android会在显示之前创建(如果需要)和准备对话框:

showDialog(TIME_DIALOG);

作为改善资源利用的方式,这个技巧让你的Activity能处理对话框中的状态信息维持。如何的选择或数据输入(例如项目选择和文本输入)都会在每个对话框实例显示之间维持。

Dialog类介绍的更多相关文章

  1. 非自定义和自定义Dialog的介绍!!!

    一.非自定义Dialog的几种形式介绍 转自:http://www.kwstu.com/ArticleView/kwstu_20139682354515 前言 对话框对于应用也是必不可少的一个组件,在 ...

  2. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  3. Android 自定义Dialog类,并在Activity中实现按钮监听。

      实际开发中,经常会用到Dialog,比如退出时候会弹出是否退出,或者还有一些编辑框也会用Dialog实现,效果图如下: 开发中遇到的问题无非在于如果在Activity中监听这个Dialog中实现的 ...

  4. MediaRecorder类介绍

    audiocallbackvideojavadescriptorencoding 目录(?)[+] 找到个MediaRecorder类介绍和大家分享一下. Mediarecorder类在官网的介绍和在 ...

  5. Object类介绍

    一.Object类介绍

  6. 关于JFace的自定义对话框(Dialog类)

    仅仅是使用MessageDialog,InputDialog等JFace中现成的对话框类是无法满足实际项目开发需要的. 很多时候都需要自己定制对话框,自定义对话框只要在Dialog类的基础上作扩展就行 ...

  7. istringstream、ostringstream、stringstream 类介绍 .

    istringstream.ostringstream.stringstream 类介绍 . 转自:http://www.cnblogs.com/gamesky/archive/2013/01/09/ ...

  8. C#中的Dictionary字典类介绍

      Dictionary字典类介绍 必须包含名空间System.Collection.Generic    Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)    键必须是 ...

  9. Android的一个自定义的动态添加Dialog类

    android里面会有自己内置的Dialog的提示框,也算是比较方便的了,但是为了省点时间,我们在项目里面添加了一个自己的Dialog类,这个类实现了能够动态的添加按钮和一些提示语句或者其他的显示效果 ...

随机推荐

  1. Visual Studio 2015官方汇总包括下载和视频

     7月20日 23:30 Visual Studio 2015正式版正式发布,作为微软新一代开发利器,在全地球乃至全宇宙乃至全太阳系中最强大 且没有之一的IDE(上述描述来自微博用户评论)跨平台支持成 ...

  2. angular(常识)

    我觉得angularjs是前端框架,而jquery只是前端工具,这两个还是没有可比性的. 看知乎上关于jquery和angular的对比http://www.zhihu.com/question/27 ...

  3. 消息中间件NetMQ结合Protobuf简介

    概述 对于稍微熟悉这两个优秀的项目来说,每个内容单独介绍都不为过,本文只是简介并探讨如何将两部分内容合并起来,使其在某些场景下更适合.更高效. NetMQ:ZeroMQ的.Net版本,ZeroMQ简单 ...

  4. (Struts)ActionForm类及表单数据验证

    LoginForm代码: /* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ pac ...

  5. 360极速浏览器使用postman

    Postman-REST-Client_v0.8.4.14.zip文件请加群下载:74085440 步骤如下: 1.将crx文件打包成zip文件 2.解压打包的zip文件,并将_metadata文件夹 ...

  6. Java设计模式-模板方法模式(Template Method)

    解释一下模板方法模式,就是指:一个抽象类中,有一个主方法,再定义1...n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用,先看个关系 ...

  7. 【poj1001】 Exponentiation

    http://poj.org/problem?id=1001 (题目链接) 题意 求实数R的n次方,要求高精度. Solution SB题Wa了一下午,直接蒯题解. 高精度,小数点以及去前导后导零很麻 ...

  8. IIS FTP Server Anonymous Writeable Reinforcement, WEBDAV Anonymous Writeable Reinforcement(undone)

    目录 . 引言 . IIS 6.0 FTP匿名登录.匿名可写加固 . IIS 7.0 FTP匿名登录.匿名可写加固 . IIS >= 7.5 FTP匿名登录.匿名可写加固 . IIS 6.0 A ...

  9. python包的概念

    1 python程序由包(package).模块(module)和函数组成.包是由一系列模块组成的集合.模块是处理某一类问题的函数和类的集合. 2 包就是一个完成特定任务的工具箱. 3 包必须含有一个 ...

  10. android 自定义控件 使用declare-styleable进行配置属性(源码角度)

          android自定义styleableattrs源码 最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行配置,于是便查询了解了下declare-styleabl ...