对话框(Dialog)是程序运行过程中弹出的窗口,Android中有好多种对话框,如警告对话框,进度对话框,列表对话框,单选对话框,日期选择对话框,时间选择对话框等;

下面用几个例子来演示一下各种对话框:

(1)在activity_main.xml中添加一个按钮:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.xiaozhang.dialog.MainActivity" >

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/button" />

</RelativeLayout>

(2)在strings.xml中加入:

<string name="button">对话框</string>

(3)各种对话框如下:

代码:

package com.xiaozhang.dialog;

import java.util.Calendar;

import android.app.Activity;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View.OnClickListener;
import android.widget.TimePicker;
import android.widget.Toast;

public class View extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(android.view.View v) {
                Calendar calendar = Calendar.getInstance();
                TimePickerDialog.OnTimeSetListener timeListener = new TimePickerDialog.OnTimeSetListener() {

                    @Override
                    public void onTimeSet(TimePicker timePicker, int hourOfDay,
                            int minute) {
                        Toast toast = Toast.makeText(View.this, "时间:"
                                + hourOfDay + ":" + minute, Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER,
                                toast.getXOffset() / 2, toast.getYOffset() / 2);

                        toast.show();
                    }
                };
                TimePickerDialog dlg = new TimePickerDialog(View.this,
                        timeListener, calendar.get(Calendar.HOUR_OF_DAY),
                        calendar.get(Calendar.MINUTE), true);
                dlg.show();
            }
        });
    }
}

代码如下:

package com.xiaozhang.dialog;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.Toast;

public class View extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(android.view.View v) {
                Calendar calendar = Calendar.getInstance();
                DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {
                    @Override
                    public void onDateSet(DatePicker datePicker, int year,
                            int month, int dayOfMonth) {

                        Toast toast = Toast.makeText(View.this, "日期:" + year
                                + "年" + (month + 1) + "月" + dayOfMonth + "日",
                                Toast.LENGTH_SHORT);
                        toast.setGravity(Gravity.CENTER,
                                toast.getXOffset() / 2, toast.getYOffset() / 2);
                        toast.show();
                    }
                };
                DatePickerDialog dlg = new DatePickerDialog(View.this,
                        dateListener, calendar.get(Calendar.YEAR), calendar
                                .get(Calendar.MONTH), calendar
                                .get(Calendar.DAY_OF_MONTH));
                dlg.show();
            }
        });
    }
}

代码如下:

package com.xiaozhang.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View.OnClickListener;
import android.view.ViewGroup;

public class View extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(android.view.View v) {
                LayoutInflater inflater = getLayoutInflater();
                android.view.View layout = inflater.inflate(R.layout.dialog,
                        (ViewGroup) findViewById(R.id.dialog));

                new AlertDialog.Builder(View.this).setTitle("自定义对话框")
                        .setView(layout).setPositiveButton("确定", null)
                        .setNegativeButton("取消", null).show();
            }
        });
    }
}

dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dialog"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/icon"
        android:layout_gravity="center"
        />
    <TextView
        android:id="@+id/textName1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/textName1"
        android:textSize="25sp"
        android:gravity="center"/>

    <TextView
        android:id="@+id/textName2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/textName2"
        android:textSize="25sp"
        android:gravity="center" />

</LinearLayout>

代码只需要修改onCreate方法中的内容即可:

new AlertDialog.Builder(View.this)
                        .setTitle("复选框")
                        .setMultiChoiceItems(
                                new String[] { "Item1", "Item2", "Item3" },
                                null, null).setPositiveButton("确定", null)
                        .setNegativeButton("取消", null).show();

new AlertDialog.Builder(View.this).setTitle("请输入")
          .setIcon(android.R.drawable.ic_dialog_info)
          .setView(new EditText(View.this))
          .setPositiveButton("确定", null)
          .setNegativeButton("取消", null).show();

代码如下:

new AlertDialog.Builder(View.this)
                        .setTitle("单选框")
                        .setIcon(android.R.drawable.ic_dialog_info)
                        .setSingleChoiceItems(
                                new String[] { "Item1", "Item2" }, 0,
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                    }
                                }).setNegativeButton("取消", null)
                        .setPositiveButton("确定", null).show();

new AlertDialog.Builder(View.this)
           .setTitle("列表框")
           .setItems(new String[] { "Item1", "Item2", "Item3","Item4" }, null)
           .setNegativeButton("确定", null).show();

package com.xiaozhang.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class MainActivity extends Activity {

    private AlertDialog.Builder builder = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 实例化AlertDialog.Builder对象
        builder = new AlertDialog.Builder(this);
        findViewById(R.id.button).setOnClickListener(new ButtonListener());

    }

    class ButtonListener implements OnClickListener {

        public void onClick(View v) {

            builder.setTitle("警告对话框").setMessage("确定要删除该文件吗?");
            // 设置确认按钮
            builder.setPositiveButton("是",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            show("删除成功");
                        }

                    });
            // 设置取消按钮
            builder.setNegativeButton("否",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            show("取消删除");
                        }
                    });
            // 创建对话框
            AlertDialog alertDialog = builder.create();
            // 显示对话框
            alertDialog.show();
        }
    }

    // 使用Toast来显示点击对话框之后的效果
    public void show(String str) {
        Toast toast = Toast.makeText(getApplicationContext(), str,
                Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
                toast.getYOffset() / 2);
        toast.show();
    }
}

package com.xiaozhang.dialog;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class ProcessDialog extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                showDialog(0);
            }
        });
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        // 对进度对话框进行实例化
        ProgressDialog dialog = new ProgressDialog(this);
        dialog.setTitle("进度对话框");
        dialog.setIndeterminate(true);
        dialog.setMessage("程序正在Loading...");
        dialog.setCancelable(true);

        dialog.setButton(Dialog.BUTTON_POSITIVE, "确定",
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        show("确定");
                    }
                });

        return dialog;
    }

    // 使用Toast来显示点击对话框之后的效果
    public void show(String str) {
        Toast toast = Toast.makeText(getApplicationContext(), str,
                Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
                toast.getYOffset() / 2);
        toast.show();
    }
}

不过showDialog()方法已经不建议使用了;

google推荐的代替方法:

package com.xiaozhang.dialog;

import android.app.Activity;
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class ProcessDialog extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                MyDialogFragment dialog = new MyDialogFragment();
                dialog.show(getFragmentManager(), "EditNameDialog");
            }
        });
    }

    class MyDialogFragment extends DialogFragment {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            // 对进度对话框进行实例化
            ProgressDialog dialog = new ProgressDialog(ProcessDialog.this);
            dialog.setTitle("进度对话框");
            dialog.setIndeterminate(true);
            dialog.setMessage("程序正在Loading...");
            dialog.setCancelable(true);

            dialog.setButton(Dialog.BUTTON_POSITIVE, "确定",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            show("确定");
                        }
                    });

            return dialog;
        }

        // 使用Toast来显示点击对话框之后的效果
        public void show(String str) {
            Toast toast = Toast.makeText(getApplicationContext(), str,
                    Toast.LENGTH_SHORT);
            toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
                    toast.getYOffset() / 2);
            toast.show();
        }

    }

}

package com.xiaozhang.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

public class NaturalDialog extends Activity {

    private AlertDialog.Builder builder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        builder = new AlertDialog.Builder(this);
        findViewById(R.id.button).setOnClickListener(new ButtonListener());
    }

    class ButtonListener implements OnClickListener {

        @Override
        public void onClick(View v) {
            builder.setIcon(R.drawable.icon).setTitle("普通对话框");
            builder.setMessage("你擅长Android吗?");
            builder.setPositiveButton("擅长",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            show("Android:擅长");
                        }
                    });
            builder.setNegativeButton("不擅长",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            show("Android:不擅长");
                        }
                    });
            builder.setNeutralButton("一般",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            show("Android:一般");
                        }
                    });
            AlertDialog alertDialog = builder.create();

            alertDialog.show();
        }

    }

    // 使用Toast来显示点击对话框之后的效果
    public void show(String str) {
        Toast toast = Toast.makeText(getApplicationContext(), str,
                Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.CENTER, toast.getXOffset() / 2,
                toast.getYOffset() / 2);
        toast.show();
    }
}

下面做个例子:

这个例子转载自:http://www.tuicool.com/articles/ZvyuAfU

当点击确定时,转移到登陆对话框,当输入用户名和密码后,转移到登陆进度对话框,然后等待3秒,跳转到另一个页面;

代码如下:

DialogTest.java

package com.xiaozhang.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

public class DialogTest extends Activity {
    /** Called when the activity is first created. */
    ProgressDialog mydialog;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        AlertDialog.Builder builder = new AlertDialog.Builder(DialogTest.this);
        builder.setTitle("登录提示").setMessage("这里需要登录");

        builder.setPositiveButton("确定", // 设置确定按钮
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // 点击确定转向登录对话框
                        LayoutInflater factory = LayoutInflater
                                .from(DialogTest.this);
                        // 得到自定义对话框
                        final View DialogView = factory.inflate(
                                R.layout.dialog, null);
                        // 创建对话框
                        AlertDialog.Builder builder = new AlertDialog.Builder(
                                DialogTest.this);
                        builder.setTitle("登录框").setView(DialogView);

                        builder.setPositiveButton("确定",
                                new DialogInterface.OnClickListener() {// 设置监听事件

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        // 输入完成后点击“确定”开始登录
                                        mydialog = ProgressDialog.show(
                                                DialogTest.this, "请稍等...",
                                                "正在登录...", true);
                                        new Thread() {
                                            public void run() {
                                                try {
                                                    sleep(3000);
                                                } catch (Exception e) {
                                                    e.printStackTrace();
                                                } finally {
                                                    // 登录结束,取消mydialog对话框

                                                    Intent intent = new Intent();
                                                    intent.setClass(
                                                            DialogTest.this,
                                                            MainActivity.class);
                                                    startActivity(intent);
                                                }
                                            }
                                        }.start();
                                    }
                                });

                        builder.setNegativeButton("取消",// 设置取消按钮
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(DialogInterface dialog,
                                            int which) {
                                        // 点击取消后退出程序
                                        DialogTest.this.finish();

                                    }
                                });

                        builder.create().show();

                    }
                });

        builder.setNeutralButton("退出", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 点击退出后退出程序
                DialogTest.this.finish();
            }
        });

        builder.create().show();

    }
}

dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:gravity="start"
        android:text="用户名"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/username2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:gravity="fill_horizontal"
        android:inputType="text"
        android:scrollHorizontally="true"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:gravity="start"
        android:text="密码"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
        android:id="@+id/password2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:gravity="fill_horizontal"
        android:inputType="textPassword"
        android:scrollHorizontally="true"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

MainActivity.java

package com.xiaozhang.dialog;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="跳转到这里" />

</LinearLayout>

还要在AndroidManifest.xml中注册这个Activity;

 <activity
            android:name=".DialogTest"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
        </activity>

Android 对话框简介的更多相关文章

  1. 【Android应用开发】Android Studio 简介 (Android Studio Overview)

    一. Intelij IDEA 环境简介 Android Studio 来源 : Android Studio 是 Intelij IDEA 的免费版本 + Android SDK 集成的; -- I ...

  2. Android对话框AlertDialog-android学习之旅(四十二)

    对话框简介 android提供了丰富的对话框支持,支持四种如下的对话框. AlertDialog简介 介绍上面六个方法的代码示例 setMessage() <?xml version=" ...

  3. Android Framework 简介

    Android Framework 简介 简介 之前的研究太偏向应用层功能实现了,很多原理不了解没有详记,结果被很多公司技术人员鄙视了,为了减少自己的短板,重新复习了一遍C++.java.Androi ...

  4. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...

  5. Android Studio 简介及导入 jar 包和第三方开源库方[转]

    原文:http://blog.sina.com.cn/s/blog_693301190102v6au.html Android Studio 简介 几天前的晚上突然又想使用 Android Studi ...

  6. Android对话框

    这周过的实在是艰辛,自打这周二起我的本本就开始闹"罢工",最后还是重装系统了事. . .   只是可怜了我的那些被格了的软件(悲伤辣么大)!  往事不要再提,人生几度风雨... 简 ...

  7. "浅谈Android"第一篇:Android系统简介

    近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...

  8. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  9. 被遗忘的Android mipmaps简介

    被遗忘的 Android mipmaps 简介 [导读]已经发布的 Android Studio1.1 版本是一个 bug 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...

随机推荐

  1. JS(七)

    JS又上完了,还是感觉JS技巧性很强,需要多积累经验...看了一下PHP的内容,感觉搭建环境好麻烦,结果回来下了个wamp感觉好像就可以了..... 1.红绿蓝颜色条: <!DOCTYPE ht ...

  2. mysql索引简单介绍

    索引从本质上来说也是一种表,这样的表存储被列为索引的列项值和指向真正完整记录的指针.索引对用户透明.仅仅被数据库引擎用来加速检索真实记录.有索引的表.insert和update操作会耗费很多其它时间而 ...

  3. 搭建Windows下Java Web开发环境

      概要 1.SSH开发相关软件及开发包下载2.软件安装及相关设置3.最简单的Web程序 1.软件下载 在D盘建一个目录JavaTools,用来存放下载的软件和开发包.(本教程将使用D盘,你也可以使用 ...

  4. JNI(5)The Invocation API

    调用API允许软件提供商加载Java VM 到任意的本地应用中.供应商可以提供支持Java的应用程序而无需链接Java VM的代码. 概述 下面代码展示了通过调用API如何使用函数.这个例子中C++代 ...

  5. Eclipse 添加快捷方式

    1.在/usr/share/applications创建一个desktop文件,命名为eclipse.desktop 文件内容如下 [Desktop Entry]Name=EclipseType=Ap ...

  6. (转)几种HtmlEncode的区别

    一.C#中的编码 HttpUtility.HtmlDecode.HttpUtility.HtmlEncode与Server.HtmlDecode.Server.HtmlEncode与HttpServe ...

  7. javascript "非法值"检验.

    <script type="text/javascript"> function getCoord() { var x = document.getElementByI ...

  8. linux 虚机增加硬盘大小 转自

      转自http://blog.csdn.net/tongyu2009/article/details/8525384 当我做到#unzip liunx_oracle时候,提示disk full? [ ...

  9. out返回值的用法与用途

    static void Main(string[] arr) { Console.WriteLine("请输入用户名"); string uname = Console.ReadL ...

  10. SVN搭建本地版本控制仓库

    1.安装TortoiseSVN 2.新建一个文件夹,比如F:\SvnProjectsCfg 3.在F:\SvnProjectsCfg新建一个文件夹project1,右键该文件夹选择“create re ...