首页 > 代码库 > android之dialog

android之dialog

什么是Dialog?

Dialog类,是一切对话框的基类.需要注意的是,Dialog类虽然可以在界面上显示,但是并非继承于View类,而是直接从java.lang.Object开始构造出来的.

类似于Activity, Dialog也是有生命周期的,它的生命周期由Activity来维护.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标题等.

了解Dialog的一些基本知识后,来看ActivityMain文件当中onCreate()方法里面的实现代码:

Button bt1 = (Button) findViewById(R.id.button1);
bt1.setOnClickListener(new OnClickListener()
{
    public void onClick(View v)
    {
        showDialog(DIALOG1);
    }
});
代码解释:

findViewById方法通过组件的id返回这个组件的引用.

setOnClickListener方法为bt1设置了一个单击监听器.

onClick()为单击Button后的回调函数.

showDialog()为Activity里边的函数.负责将id为DIALOG1的Dialog显示出来.

执行showDialog(DIALOG)代码后,系统执行回调函数onCreateDialog(),实现代码如下:

protected Dialog onCreateDialog(int id)
{
    switch(id)
    {
        case DIALOG1:
            return buildDialog1(ActivityMain.this);
        case DIALOG2:
            return buildDialog2(ActivityMain.this);
        case DIALOG3:
            return buildDialog3(ActivityMain.this);
    }
    return null;
}
代码解释:

针对不同的Dialog的id,生成不同的Dialog.

buildDialog1函数生成的第一个要显示的Dialog.

buildDialog的参数为context.

接下来看看buildDialog1()函数,其实现代码如下:

private Dialog buildDialog1(Context context)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setIcon(R.drawable.alert_dialog_icon);
    builder.setTitle(R.string.alert_dialog_two_buttons_title);
    builder.setPositiveButton(R.string.alert_dialog_ok,new DialogInterface.OnClickListener()    {        public void onClick(DialogInterface dialog,int whichButton)        {            setTitle("点击了OK")        }    });    builder.setNegativeButton(R.string.alert_dialog_cancel,new DialogInterface.OnClickListener()    {        public void onClick(DialogInterface dialog,int whichButton)        {            setTitle("点击了cancel");        }    });    return builder.create(); }
代码解释:

AlertDialog.Builder builder = new AlertDialog.Builder(context)语句首先生成一个AlertDialog.Builder的对象,这样就可以开始构造AlertDialog.

builder.setIcon(R.drawable.alert_dialog_icon)语句给AlertDialog预设置一个图片.这里设置的是alert_dialog_icon.png图片.

builder.setTitle(R.string.alert_dialog_two_buttons_title)语句给AlertDialog预设一个标题,标题的字符串内容在value目录的string.xml文件里面定义的.

setPositiveButton()这个方法设置确定按钮的一些属性.第一个参数为按钮上显示出来的内容;第二个参数为DialogInterface.OnClickListener()监听器对象.

onClick()方法为监听器中的回调方法,即当单击Dialog的按钮时,系统回调这个方法. 在这个回调函数里,我们通过setTitle方法,将标题栏的内容进行了重新设置.

setNegativeButton()方法和setPositiveButton()方法对应.

=================

AlertDialog 与 AlertDialog.Builder :

AlertDialog是Dialog的一个直接子类,AlertDialog也是Android系统当中最常用的对话框之一.

一个AlertDialog可以有两个或者三个Button,可以对一个AlertDialog设置title和message.

不能直接通过AlertDialog的构造函数来生成一个AlertDialog.一般生成AlertDialog的时候都是通过它的一个内部静态类AlertDialog.Builder来构造的.

builder.setMessage(R.string.alert_dialog_msg)这个方法是在title下边设置一些信息(message).

setNeutralButton()方法设置中间按钮的一些属性,具体设置方法同setPositiveButton()和setNegativeButton()一样.

=================

预设好所有关于Dialog的属性之后,执行builder.create()后生成一个配置好的Dialog.

当程序执行完onCreateDialog()方法后,接着会执行onPrepareDialog方法. 在onPrepareDialog()方法里面可以对Dialog进行修改.

举个例子:

protected void onPrepareDialog(int id , Dialog dialog)
{
    if(id = DIALOG1)
    {
         setTitle("改变为:");
    }
}

此时title就会被改变了.



android之dialog