概述

对话框(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. textarea 里设置 style="resize:none"

    禁止textarea拉伸的方法是::                                    设置这个 style="resize:none" 属性 例子: < ...

  2. Maven安装和使用

    一.安   装 1.解压好后,添加系统环境变量 变量名:MAVEN_HOME 属性值:D:\apache-maven-3.3.3  //也就是解压的路径 path中添加:%MAVEN_HOME%\bi ...

  3. List集合学习总结

    1.List接口是Collection的子接口,用于定义线性表数据结构 ,可以将List理解为存放对象的数组,只不过其元素个数可以动态增加或减少. 2.List接口的两个常见的实现类为ArrayLis ...

  4. POI处理Excel中各种日期格式问题

    前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...

  5. eclipse换了高版本的maven插件后报错:org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project

    在给eclipse换了高版本的maven插件后,引入jar包报如下的错误:  org.apache.maven.archiver.MavenArchiver.getManifest(org.apach ...

  6. Spring Security OAuth2 Demo -- good

    1. 添加依赖授权服务是基于Spring Security的,因此需要在项目中引入两个依赖: <dependency> <groupId>org.springframework ...

  7. 使用Map标签指定点击区域时的兼容性问题

    电商m站的首页,有一个需求是配一张大的banner图,然后指定某些区域是热区,点击之后跳转到不同的活动页. 听起来简单明了,实现也比较容易,立刻就想起来有个map标签,简直就是为这个需求量身定做. 简 ...

  8. Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle

    使用.net core也有一段时间了,一直都没有Oracle官方的正式版驱动程序,更别说EF版本了.之前基于Oracle官方的.net core预览版本写了个Dapper的数据库操作实现,但是总感觉不 ...

  9. .Net Core vs .Net Framework 如何为一个应用程序选择一个运行时

    .Net Core是下一件大事吗?我已经使用了一段时间了,我倾向认为它是.事实上,我们推测,在2018年,对这项技术熟练的开发人员将会有巨大的需求.但是它和.Net Framework的区别是什么?你 ...

  10. IP地址和MAC地址的关系

    IP地址是网络层的概念,而MAC地址是数据链路层的概念.IP地址在网络层上对不同的硬件地址类型进行了统一,从而提供网络互联的可能:而硬件地址在真正的数据传输中要用到.当应用程序把数据从源主机发送到目标 ...