对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法。看看各位童鞋在平时的工作中否都用到了AlertDialog的这些特性。

OK,废话不多说,进入我们今天的正题。

普通对话框

普通对话框就是我们最最常用的对话框,实现起来并不复杂,实现出来的效果当然也是最简单的,如下:

		AlertDialog dialog = new AlertDialog.Builder(this).setTitle("普通对话框").setIcon(R.drawable.a4s)
.setNegativeButton("取消", null).setPositiveButton("确定", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
//处理确认按钮的点击事件
}
}).setNeutralButton("中立", null)
.setMessage("确认删除?").create();
dialog.show();

我们可以给一个对话框设置标题,也可以设置图标,在对话框的最下面我们可以设置三个按钮,分别是取消、确定、中立,一般情况下,我们可以在确认按钮中加入相应的点击事件。OK,那么这样一个对话框它的显示效果是什么样子的呢?如下:

显示Item的对话框

如果我们的对话框中要显示若干个item,那么我们可以给AlertDialog设置item,如下:

AlertDialog dialog = new AlertDialog.Builder(this).setTitle("显示Item对话框").setIcon(R.drawable.a4s)
.setItems(items, new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
}
}).create();
dialog.show();

这里的items是一个String类型的数组,如下:

items = new String[] { "魏", "蜀", "吴" };

那么这里我们就没有必要再设置最下方的三个按钮了,直接点击Item之后,触发相应的事件。在onClick方法中有一个int型参数叫做which,这个参数表示的是用户点击了第几个item,显示效果如下:

当用户点击不同的item之后,我们在onClick方法中根据which的值的不同做出相应的处理。

单选对话框

和显示Item的对话框一样,单选对话框我们其实也没有必要再设置最下面的三个按钮(如果你非要设置也没问题),那么他的代码是这样的:

		AlertDialog dialog = new AlertDialog.Builder(this).setTitle("单选对话框").setIcon(R.drawable.a4s)
.setSingleChoiceItems(items, -1, new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
dialog.dismiss();
}
}).create();
dialog.show();

这次我们调用的方法是setSingleChoiceItems这个方法,这个方法有三个参数,其中items的值和前面的一样,第二个参数表示预选中的item,第三个参数则是事件的处理方法。事件处理方法也一样,不同的是这里多了一句dialog.dismiss();,没错,这里我们要手动关闭dialog。那么它的显示效果是这样的:

当我们选中任意一个item的时候,dialog将会自动关闭,相应的点击事件我们在onClick方法中进行处理。

多选对话框

和单选对话框不同,多选对话框就要求我们必须有下面的按钮,那么在这里我给下面设置两个按钮,我们来看看代码:

AlertDialog dialog = new AlertDialog.Builder(this).setTitle("多选对话框").setIcon(R.drawable.a4s)
.setNegativeButton("取消", null).setPositiveButton("确定", null)
.setMultiChoiceItems(items, null, new OnMultiChoiceClickListener() { @Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) { }
}).create();
dialog.show();

和setSingleChoiceItems一样,这里的setMultiChoiceItems也有三个参数,分别是数据源,预选中的item以及item的点击事件,预选中的item是一个Boolean型的数组,表示一开始哪些item被选中哪些item没有被选中,这里的点击事件也多了一个参数,就是isChecked,表示该item是否被选中,那么我们可以通过一个boolean类型的数组来记录item的选中情况。这里我就不再单独写了。多选对话框的显示效果如下图所示:

当我们选完我们要选的每一项之后,点击确定就可以拿到相应的数据了。

自定义Adapter

可能有同学注意到了,Builder还有一个方法叫做setAdapter,这个方法的参数是一个ListAdapter,就是我们平时为ListView制作的Adapter,可以设置Adapter意味着我们的AlertDialog可以显示出来的内容更加的丰富,那么在这里我就使用最简单的ArrayAdapter来为大家做一个Demo,代码如下:

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[] { "张三", "李四" });
AlertDialog dialog = new AlertDialog.Builder(this).setTitle("自定义Adapter").setIcon(R.drawable.a4s)
.setAdapter(adapter, new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
}
}).create();
dialog.show();

显示效果如下:

这个时候我们想让AlertDialog显示成什么样子就能让它显示成什么样子,Adapter给我们带来了极大的灵活性。

自定义View

当然,这里终极大Boss还不是自定义Adapter,而是自定义View,通过自定义View,我们可以让我们的AlertDialog显示出任何我们想要的界面,代码如下:

View view = LayoutInflater.from(this).inflate(R.layout.activity_main, null);
AlertDialog dialog = new AlertDialog.Builder(this).setTitle("自定义View").setIcon(R.drawable.a4s).setView(view)
.create();
dialog.show();

显示效果如下:

使用自定义View的方式,我们可以自定义出各种各样的Dialog出来,比如登录的Dialog,关于或者说明的Dialog等等。

AlertDialog的使用方式基本上就这么几种,Demo下载http://download.csdn.net/detail/u012702547/9433640

Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解的更多相关文章

  1. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

  2. 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程

    反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑)   背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...

  3. ANDROID自定义视图——onMeasure流程,MeasureSpec详解

    简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量——onMeasure():决定View的大小 2.布局——onLayout():决定View在ViewGroup中的位置 3. ...

  4. android 开发 View _6_Canvas详解

    牛逼大神的博客地址:http://www.gcssloop.com/customview/Canvas_BasicGraphics 安卓自定义View进阶-Canvas之绘制图形 在上一篇自定义Vie ...

  5. Android笔记(十五) Android中的基本组件——单选框和复选框

    单选框和多选框通常用来在设置用户个人资料时候,选择性别.爱好等,不需要用户直接输入,直接在备选选项中选择,简单方便. 直接看代码: <?xml version="1.0" e ...

  6. 【Android 应用开发】OpenGL ES 2.0 -- 制作 3D 彩色旋转三角形 - 顶点着色器 片元着色器 使用详解

    最近开始关注OpenGL ES 2.0 这是真正意义上的理解的第一个3D程序 , 从零开始学习 . 案例下载地址 : http://download.csdn.net/detail/han120201 ...

  7. Android View坐标系详解(getTop()、getX、getTranslationX...)

    View 提供了如下 5 种方法获取 View 的坐标:1. View.getTop().View.getLeft().View.getBottom().View.getRight();2. View ...

  8. 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)

    java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...

  9. (转).Net中自定义类作为Dictionary的key详解

    在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构 ...

随机推荐

  1. SSH框架中配置Hibernate使用proxool连接池

    一.导入proxool.jar包 案例用的是proxool-0.8.3.jar,一般通过MyEclipse配置的SSH都会包含这个jar,如果没有,就去网上搜下下载导入就好了. 二.新建Proxool ...

  2. jQuery功能一览

    // Hello world!"); }); $("#btn5").click(function(){ $("#test5").val("D ...

  3. MVC View基础

    View主要用于呈现数据.由于Controller和相关的Service已经处理完业务逻辑并将结果打包成model实体,View只需要怎么去获得model并将其转为Html 1选择需要渲染的视图 在上 ...

  4. [Buffalo] 一些SQL函数

    取得当前时间的函数:GETDATE() 计算时间的函数:DATEADD(datepart,number,date) 计算两个时间差额:DATEDIFF(datepart,startdate,endda ...

  5. Create Dynamic Modal Dialog Form in AdminLTE Bootstrap template

    原文地址 Create modal dialog form in jquery using bootstrap framework, slightly different from the usual ...

  6. 【Java基础】Java多线程之线程组和线程池

    在上一篇文章中,讲述了线程的基本概念和用法,这里将继续讲述线程组和线程池的一些东西. 线程组:java.lang.ThreadGroup 1. 线程组的介绍 线程组表示一个线程的集合.此外,线程组也可 ...

  7. HW1.7

    public class Solution { public static void main(String[] args) { System.out.println("π = " ...

  8. 各大算法专题-STL篇

    这篇文章着重记录c++中STL的用法.主要粗略的介绍其用法,以知识点的形式呈现其功能,不会深入源码分析其工作原理. 排序和检索. sort(a,a+n),对a[0]往后的n个元素(包括a[0])进行排 ...

  9. DIV遮罩层传值

    今天费了很大的劲儿才搞定!下面贴出代码和总结: 1.首先是前台代码: <%@ Page Title="" Language="C#" MasterPage ...

  10. 创建二叉树,C语言实现

    一.前序遍历创建二叉树,使用递归,头文件 BiTree.h /*槽点一:创建树时用scanf输入不成功*/ #ifndef BITREE_H #define BITREE_H #include< ...