概述

对话框(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. DX11 Without DirectX SDK--04 使用DirectX Tool Kit帮助开发

    回到 DirectX11--使用Windows SDK来进行开发 DirectX Tool Kit下载 DirectX Tool Kit是一个包含许多类的集合,用于为公共Windows平台编写Dire ...

  2. codeforces 983A Finite or not?

    题意: 判断一个分数在某一进制下是否为无限小数. 思路: 首先把这个分数约分,然后便是判断. 首先,一个分数是否为无限小数,与分子是无关的,只与分母有关. 然后,再来看看10进制的分数,可化为有限小数 ...

  3. 配置teredo,启用ipv6,xx-net

    最近使用XX-NET科学上网 ,提示要配置使用IPv6.根据github的上win10配置ipv6方式(https://github.com/XX-net/XX-Net/wiki/IPv6-Win10 ...

  4. 【手记】小心在where中使用NEWID()的大坑

    这个表达式: --把GUID弄成正整数,然后取模 是随机返回0.1.2这三个数,不可能返回其它东西,但是如果把它用在where里面,就会发生很神奇的事情,比如这个查询: --创建一个只有1列3行的表, ...

  5. 写个批处理脚本来帮忙干活--遍历文件夹&字符串处理

    这次打算写几篇关于脚本方面的博客,主要是记录一下 Gradle 脚本和批处理脚本的一些写法,方便后续查阅. 前言 平常开发过程中,一些较为重复的手工性工作,如果能让脚本来帮忙处理,自然是最好的,刚好之 ...

  6. 6.app架构基础

    app架构,一个听起来高大尚的名字,很多小伙伴听到这个词语感觉很迷茫,不知道架构具体说的是啥?在q群里,"app后端应该怎么架构"这个问题被问了无数次.通过阅读本文,根据本人提出的 ...

  7. ELK 架构之 Logstash 和 Filebeat 配置使用(采集过滤)

    相关文章: ELK 架构之 Elasticsearch 和 Kibana 安装配置 ELK 架构之 Logstash 和 Filebeat 安装配置 ELK 使用步骤:Spring Boot 日志输出 ...

  8. python:解析js中常见的 不带引号的key的 json

    首先要明晰一点,json标准中,key是必须要带引号的,所以标准json模块解析不带引号的key的 json就会抛错 不过有一些lib可以帮我们解析 如:demjson(链接) >>> ...

  9. op.go

    package } ) : : : ,: ,: : : ,: ,: : : ,: ,: ;; ] )} } minutes when there is no incoming events. // P ...

  10. SpringBoot集成Security,JWT,Swagger全分析

    GitHub地址: https://github.com/li-jun0201/springsecuritydemo本项目采用SpringBoot1.5.9, SpringSecurity,JWT, ...