一起学Android之Dialog
概述
对话框(Dialog)是一个小窗口,在Android系统开发中经常会用到,它提示用户做决定或者输入一些东西,对话框并不填充屏幕,是一个模态(Modal)窗口。Dialog类是所有对话框的基类,应避免直接实例化对话框,通常使用它的子类(AlertDialog,DatePickerDialog or TimePickerDialog),本文主要讲解的是AlertDialog。
什么是AlertDialog?
可以显示标题、最多三个按钮、可供选择的项目列表或自定义布局的对话框。
创建步骤
- 构建一个Builder(AlertDialog.Builder)。
- 设置对话框标题(setTitle),内容信息(setMessage)。
- 设置对话框显示的按钮,最多三个按钮(setPositiveButton,setNegativeButton)。
- 调用方法,创建对话框对象(create)。
- 显示对话框(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的更多相关文章
- 从零开始学android -- dialog
先看个效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...
- Android PopupWindow Dialog 关于 is your activity running 崩溃详解
Android PopupWindow Dialog 关于 is your activity running 崩溃详解 [TOC] 起因 对于 PopupWindow Dialog 需要 Activi ...
- Android开发学习之路-该怎么学Android(Service和Activity通信为例)
在大部分地方,比如书本或者学校和培训机构,教学Android的方式都基本类似,就是告诉先上原理方法,然后对着代码讲一下. 但是,这往往不是一个很好的方法,为什么? ① 学生要掌握这个方法的用途,只能通 ...
- Android 自定义Dialog类,并在Activity中实现按钮监听。
实际开发中,经常会用到Dialog,比如退出时候会弹出是否退出,或者还有一些编辑框也会用Dialog实现,效果图如下: 开发中遇到的问题无非在于如果在Activity中监听这个Dialog中实现的 ...
- 菜鸟学Android编程——简单计算器《一》
菜鸟瞎搞,高手莫进 本人菜鸟一枚,最近在学Android编程,网上看了一些视频教程,于是想着平时手机上的计算器应该很简单,自己何不尝试着做一个呢? 于是就冒冒失失的开撸了. 简单计算器嘛,功能当然很少 ...
- Android 对话框(Dialog)大全 建立你自己的对话框
Android 对话框(Dialog)大全 建立你自己的对话框 原文地址: http://www.cnblogs.com/salam/archive/2010/11/15/1877512.html A ...
- 学Android开发,入门语言java知识点
学Android开发,入门语言java知识点 Android是一种以Linux为基础的开源码操作系统,主要使用于便携设备,而linux是用c语言和少量汇编语言写成的,如果你想研究Android,就去学 ...
- Android自定义Dialog
Android开发过程中,常常会遇到一些需求场景——在界面上弹出一个弹框,对用户进行提醒并让用户进行某些选择性的操作, 如退出登录时的弹窗,让用户选择“退出”还是“取消”等操作. Android系统提 ...
- Android中Dialog
在Android中,Dialog是一个非常重要的UI, 它可以方便的给用户提示,用最简洁的方式向用户展示信息, 以下的图片是Dialog的一个整体架构,通过它,可以总体对Dialog有一个很清晰的认识 ...
随机推荐
- css绝对底部的实现方法
最近发现公司做的好多管理系统也存在这样的问题,当页面不够长的时候,页尾也跟着跑到了页面中部,这样确实感觉视觉体验不太好,没有研究之前还真不知道还能用css实现,主要利用min-height;paddi ...
- 微信小程序开发库grace vs wepy
grace和wepy都是辅助小程序开发的开源库,本文对两者做个对比. 注:本文是作者本人的一些拙见,纯粹的技术讨论,不想引起技术信仰之争,欢迎积极.正向的讨论及建议. 如果你还不了解Grace, 请参 ...
- 功能强大的swagger-editor的介绍与使用
一.Swagger Editor简介 Swagger Editor是一个开源的编辑器,并且它也是一个基于Angular的成功案例.在Swagger Editor中,我们可以基于YAML等语法定义我们的 ...
- Socket 聊天工具
package cn.davy.mychat; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FontD ...
- Java公开课-04.异常
一,异常的概念 程序在运行时,发生了我们没有预测的结果,它阻止了程序按照我们预期效果执行 二,怎么保证我们的程序在发生异常以后 ,代码继续执行? 异常处理机制 在程序发生异常以后,还能按照我们事先设定 ...
- 关于局域网 手机连接apache服务器报403forbidden错误参考如下2017.6.6
http://www.glbwl.com/wampServer-403-forbidden.html
- 基于opencv3.0和下的条形码与二维码识别
其中对条码与二维码的识别分为以下4个步骤 1. 利用opencv和Zbar(或者Zxing)对标准的条形码图片(即没有多余背景干扰,且图片没有倾斜)进行解码,将解码信息显示出来,并与原始信息对比. 2 ...
- logrus_hook.go
package) //表示自身栈中跳过6个,:] entry.Data["file"] = fileName entry.Data["func" ...
- 【BZOJ 3626】 [LNOI2014]LCA【在线+主席树+树剖】
题目链接: TP 题解: 可能是我比较纱布,看不懂题解,只好自己想了…… 先附一个离线版本题解[Ivan] 我们考虑对于询问区间是可以差分的,然而这并没有什么卵用,然后考虑怎么统计答案. 首先LC ...
- linux学习之路(3)
vim编辑器使用 命令模式:控制光标移动,可对文本进行复制.粘贴.删除和查找等工作. 输入模式:正常的文本录入. 末行模式:保存或退出文档,以及设置编辑环境. vim中常用命令: dd 删除(剪切) ...