对话框在程序中不是必备的,但是用好对话框能对我们编写的应用增色不少。采用对话框可以大大增加应用的友好性。比较常用的背景是:用户登陆、网络正在下载、下载成功或者失败的提示,还有,比如:短信来了、电池没电了等等,只要你想到的,能提高用户体验的,你都可以使用对话框。
首先,请大家找到文档,在右上角的搜索框中输入Dialog,根据提示,选择app.dialog。大家可以先阅读一下英文文档,大体先看看,继承于哪个类,有哪些子类等等,这对于知识的积累相当重要。不是很难,如果你觉得读不懂,可以借助有道词典。我一直觉得,如果没有中国这么庞大的市场,Android不可能发展这么快,可是他们为什么就不出中文文档呢,反而出日语的文档,想不通。强烈建议他们尽快出中文的文档。
什么是Dialog
Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽然可以在界面上显示,但是并非继承于View类,而是直接从java.lang.Object开始构造出的。类似于Activity,Dialog也是有生命周期的,它的生命周期由Activity来维护。Activity负责生成、保存、恢复它。在生命周期的每一个阶段都有一些回调函数供系统反向调用。
ShowDialog(int id):负责显示标示为id的Dialog,这个函数如果调用后,系统将反向调用Dialog的回调函数onCreateDialog(int id);
dismissDialog(int id):使标示为id的Dialog在界面当中消。
Dialog有两个比较常见的回调函数,onCreateDialog(int id)和onPrepareDialog(int id,Dialog dialog)。如果Activity调用了showDialog(int id)后,如果这个Dialog是第一次生成,系统将反向调用Dialog的回调函数onCreateDialog(int id),再调用onPrepareDialog(int id ,Dialog dialog),如果这个Dialog还没有生成,只不过还没有显示出来,那么将不会回调onCreateDialog(int id),而是直接回调onPrepareDialog(int id,Dialog dialog)方法。onPrepareDialog(int id,Dialog dialog)方法提供了这样一套机制,当Dialog生成但是没有显示出来的时候,使得有机会在显示前对Dialog做一些修改,如对Dialog标题进行修改。
什么是AlertDialog?什么是AlertDialog.Builder?
AlertDialog是Dialog的一个直接子类,一个AlertDialog可以有两个Button或者3个Button,可以对一个AlertDialog设置title、message。不能直接通过AlertDialog的构造函数来生成一个AlertDialog,一般生成的时候都是通过它的的一个内部静态类AlertDialog.Builder来构造的。
下面才是我写这篇文章的用意,在对话框中实现自定义视图,来提升用户体验。
给Dialog设置个性化的View(我翻译为视图)
系统中提供的太死板了,我们总是会有很多新奇的想法,那么如何实现给一个Dialog自定义一个布局呢?我们要用到LayoutInFlater,通过这个类的inflate方法,可以将一个XML的布局变成一个View实例。这种用法,我们会经常用到,所以务必学会。然后,我们通过builder.setView(myownview)这个语句,就可以将个性化的视图放到Dialog里边去。当然,你可以传入任何的视图对象,比如图片框,WebView等,尽情发挥你的想象力吧。
进度条Dialog:ProgressDialog
顾名思义,这个Dialog负责给用户显示进度的相关情况,它是AlertDialog的一个子类,在我的示例代码中,我是实现默认的进度显示。当然可以配置自己的进度条。同时有一点,提醒大家要注意,ProgressDialog不需要Builder这个内部静态类进行构造,而是直接使用构造函数进行构造。
其实在android当中还提供了很多Dialog,如CharacterPickerDialog/TimePickerDialog/DatePickerDialog等,但是都不是很常用。
Android中Toast的用法简介Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失。下面用一个实例来看看如何使用Toast。