概述

对话框(Dialog)是一个小窗口,在Android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口。Dialog类是所有对话框的基类,应避免直接实例化对话框,通常使用它的子类(AlertDialog,DatePickerDialog or TimePickerDialog),本文主要讲解的是AlertDialog。

什么是AlertDialog?

可以显示标题、最多三个按钮、可供选择的项目列表或自定义布局的对话框。

创建步骤

  1. 构建一个Builder(AlertDialog.Builder)。
  2. 设置对话框标题(setTitle),内容信息(setMessage)。
  3. 设置对话框显示的按钮,最多三个按钮(setPositiveButton,setNegativeButton)。
  4. 调用方法,创建对话框对象(create)。
  5. 显示对话框(show)。

涉及知识点

  • AlertDialog.Builder 对话框构造器,可以进行对话框进行设置,并创建对话框对象。
  • setTitle 设置对话框标题,setMessage设置对话框显示的文本内容
  • setNegativeButton 设置对话框显示的否定按钮(Cancel), setPositiveButton设置对话框显示的肯定按钮(OK)
  • show() 显示对话框
  • setItems 设置对话框的列表内容
  • setSingleChoiceItems 设置单选按钮的列表项,setMultiChoiceItems设置多选按钮的列表项
  • setView 设置自定义视图的对话框

默认对话框

如下图所示(显示了标题,内容,两个按钮):

关键代码如下:

     /**
* 默认对话框事件响应方法
*
* @param v
*/
public void showDefaultDialog(View v) {
//创建一个Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置对话框标题
builder.setTitle("提示");
//设置对话框内容
builder.setMessage("这是一个对话框的提示");
//积极按钮?
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了OK", Toast.LENGTH_SHORT).show();
}
});
//消极按钮
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了Cancel", Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}

列表对话框

如下图所示(弹出的对话框内容展示为一个列表)用户通过列表进行选择

关键代码如下:

  /**
* 列表对话框响应事件
*
* @param v
*/
public void showListDialog(View v) {
//构件一个对话框Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置标题
builder.setTitle(R.string.pick_color);
//将资源文件转化为数组对象
arr_colors = getResources().getStringArray(R.array.arr_colors);
//设置列表内容和点击事件
builder.setItems(R.array.arr_colors, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}

单选按钮对话框

如下图所示(用户通过单选按钮进行选择):

关键代码如下:

    /**
* 单选框对话框按钮事件
*
* @param v
*/
public void showSingleDialog(View v) {
//构件一个对话框Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置标题
builder.setTitle(R.string.pick_color);
//将资源文件转化为数组对象
arr_colors = getResources().getStringArray(R.array.arr_colors);
checkedItems=new int[arr_colors.length];
//设置列表内容和点击事件,第二个参数checkedItem表示默认选中项
builder.setSingleChoiceItems(R.array.arr_colors, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
for(int i=0;i<checkedItems.length;i++){
if(i==which){
checkedItems[i]=1;
}else{
checkedItems[i]=0;
}
}
Toast.makeText(MainActivity.this, "你选择了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
}
});
//积极按钮?
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了OK"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//消极按钮
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了Cancel"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}

复选框对话框

如下图所示(对话框的内容可以进行多选):

关键代码如下:

   /**
* 复选框对话框事件
*
* @param v
*/
public void showMultipleDialog(View v) {
//构件一个对话框Builder
AlertDialog.Builder builder = new AlertDialog.Builder(this);
//设置标题
builder.setTitle(R.string.pick_color);
//将资源文件转化为数组对象
arr_colors = getResources().getStringArray(R.array.arr_colors);
checkedItems=new int[arr_colors.length];
//设置列表内容和点击事件
builder.setMultiChoiceItems(R.array.arr_colors, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
String msg="";
if(isChecked){
checkedItems[which]=1;
msg="选择";
}else{
checkedItems[which]=0;
msg="取消";
}
Toast.makeText(MainActivity.this, "你"+msg+"了[" + arr_colors[which] + "]", Toast.LENGTH_SHORT).show();
}
});
//积极按钮?
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了OK:"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//消极按钮
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "你选择了Cancel:"+getCheckedItems(), Toast.LENGTH_SHORT).show();
}
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}

自定义对话框

如下图所示(用户可以在弹出的对话框中输入内容等信息)

关键代码如下:

  /**
* 自定义对话框事件按钮
* @param v
*/
public void showCustomerDialog(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(this);
// Get the layout inflater
LayoutInflater inflater = getLayoutInflater();
View customerView=inflater.inflate(R.layout.dialog_layout, null);
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
mUserName= (EditText) customerView.findViewById(R.id.username);
mPassword= (EditText) customerView.findViewById(R.id.password);
builder.setView(customerView)
// Add action buttons
.setPositiveButton(R.string.sign_in, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// sign in the user ...
Toast.makeText(MainActivity.this, "你输入的用户名为:"+mUserName.getText()+"密码为:"+mPassword.getText(), Toast.LENGTH_SHORT).show();
}
})
.setNegativeButton(R.string.cancel2, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
Toast.makeText(MainActivity.this, "你取消了输入的用户名密码", Toast.LENGTH_SHORT).show(); }
});
//创建一个对话框
AlertDialog dialog = builder.create();
//显示一个对话框
dialog.show();
}

备注

记录学习,记录进步!

一起学Android之Dialog的更多相关文章

  1. 从零开始学android -- dialog

    先看个效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  2. Android PopupWindow Dialog 关于 is your activity running 崩溃详解

    Android PopupWindow Dialog 关于 is your activity running 崩溃详解 [TOC] 起因 对于 PopupWindow Dialog 需要 Activi ...

  3. Android开发学习之路-该怎么学Android(Service和Activity通信为例)

    在大部分地方,比如书本或者学校和培训机构,教学Android的方式都基本类似,就是告诉先上原理方法,然后对着代码讲一下. 但是,这往往不是一个很好的方法,为什么? ① 学生要掌握这个方法的用途,只能通 ...

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

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

  5. 菜鸟学Android编程——简单计算器《一》

    菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...

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

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

  7. 学Android开发,入门语言java知识点

    学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...

  8. Android自定义Dialog

    Android开发过程中,常常会遇到一些需求场景——在界面上弹出一个弹框,对用户进行提醒并让用户进行某些选择性的操作, 如退出登录时的弹窗,让用户选择“退出”还是“取消”等操作. Android系统提 ...

  9. Android中Dialog

    在Android中,Dialog是一个非常重要的UI, 它可以方便的给用户提示,用最简洁的方式向用户展示信息, 以下的图片是Dialog的一个整体架构,通过它,可以总体对Dialog有一个很清晰的认识 ...

随机推荐

  1. PAT1013: Battle Over Cities

    1013. Battle Over Cities (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...

  2. tomcat第一次使用正常启动后访问8080端口报404错误

    问题:tomcat第一次使用正常启动后访问8080端口报404错误 解决办法:双击tomcat调出tomcat的xml文件页面,Server Locations 默认是选第一行即Use Workspa ...

  3. jsp页面日期格式不正确

    第一种: 如果是从数据库获取的时间(数据库中日期格式是乱的)可以在数据库取数据时   进行格式化   例如  ;TO_CHAR(SYSDATE,'YYYY-MM-DD') 第二种: 在数据库取出数据后 ...

  4. springboot之启动原理解析

    前言 SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起一步步揭开SpringBoot的神秘面 ...

  5. java并发之ReentrantLock学习理解

    简介 java多线程中可以使用synchronized关键字来实现线程间同步互斥,但在jdk1.5中新增加了ReentrantLock类也能实现同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定 ...

  6. Linux kernel的中断子系统之(九):tasklet

    返回目录:<ARM-Linux中断系统>. 总结: 二介绍了tasklet存在的意义. 三介绍了通过tasklet_struct来抽想一个tasklet,每个CPU维护一个tasklet链 ...

  7. Windows上使用Git托管代码到Coding

    作者:荒原之梦 Git简介: Git是一款分布式版本控制系统,可用于项目的版本管理.Git可以管理本地代码仓库与远程代码仓库间的连接以及进行版本控制,使得我们可以在本地离线进行修改等操作,之后再将代码 ...

  8. teeporxy.go

    package,, {         cer, err := tls.LoadX509KeyPair(*tlsCertificate, *tlsPrivateKey)         if err ...

  9. bzoj3811 玛里苟斯

    分三种情况讨论 k=1时,对于每一位而言,只要有一个数这一位是1,那么这个就有0.5的概率是1,选他就是1,不选就是0,有第二个的话,在第一个选或不选的前提下,也各有0.5的几率选或不选,0和1的概率 ...

  10. 【强连通分量+spfa】Bzoj1179 Apio2009 Atm

    Description Solution 显然缩强连通分量,然后求最长路,虽然是DAG但还是有点麻烦,于是用了spfa. Code 重建图_数组写错好多次,感觉做这题也就是练了一下实现. #inclu ...