android中的对话框形式有四种,分别是一般对话框形式,列表对话框形式,单选按钮对话框,多选按钮对话框,下面我一一对他们进行详解。

<一>一般对话框

一般对话框形式如下图:

具体实现代码如下:

 1 new AlertDialog.Builder(this)
2 .setTitle("删除")//设置标题
3 .setMessage("确定要删除指定的记录?")//设置提示消息
4 .setPositiveButton("确定",new DialogInterface.OnClickListener() {//设置确定的按键
5 @Override
6 public void onClick(DialogInterface dialog, int which) {
7 //do something
8 }
9 })
10 .setNegativeButton("取消",new DialogInterface.OnClickListener() {//设置取消按键
11 @Override
12 public void onClick(DialogInterface dialog, int which) {
13 //do something
14 }
15 })
16 .setNeutralButton("忽略",new DialogInterface.OnClickListener() {//中立的,什么也不错
17 @Override
18 public void onClick(DialogInterface dialog, int which) {
19 //do something
20 }
21 })
22 .setCancelable(false)//设置按返回键是否响应返回,这是是不响应
23 .show();//显示

设置每一个Button按键时,都会传(CharSequence text, OnClickListener listener)参数,text是按键的文本,listener是一个DialogInterface.OnClickListener(),所以我们要创建这个对象并实现它的点击事件。在点击事件中有一个which参数不知道大家有没有注意,这个which实际上代表的是一个唯一的int型数值。像上面的setPositiveButton中的which代表的是-1,setNegativeButton中的which代表的是-3,setNeutralButton中的which代表的是-2.

所以在这里为了代码的简化,我们不再为每一个Button创建DialogInterface.OnClickListener()对象,而是只创建一个DialogInterface.OnClickListener()对象来分别实现它们的点击事件。具体实现代码如下:

 1 DialogInterface.OnClickListener dialog = new DialogInterface.OnClickListener() {
2 public void onClick(DialogInterface dialog, int which) {
3 if(which == DialogInterface.BUTTON_POSITIVE){//确定按键的点击事件
4 Toast.makeText(MainActivity.this, "ok!", 1).show();
5 }
6 else if(which == DialogInterface.BUTTON_NEGATIVE){//取消按键的点击事件
7 Toast.makeText(MainActivity.this, "cancel", 1).show();
8 }
9 else if(which == DialogInterface.BUTTON_NEUTRAL){//忽略按键的点击事件
10 Toast.makeText(MainActivity.this, "不知道", 1).show();
11 }
12 }
13 };
1 //对话框
2 new AlertDialog.Builder(this)
3 .setTitle("删除")//设置标题
4 .setMessage("确定要删除指定的记录?")//设置提示消息
5 .setPositiveButton("确定",dialog)
6 .setNegativeButton("取消",dialog)
7 .setNeutralButton("忽略",dialog)
8 .setCancelable(false)//设置按返回键是否响应返回,这是是不响应
9 .show();//显示

<二>列表对话框

懂得了上面的一般对话框的实现,那么下面的三种对话框就很容易实现了。列表对话框的实现效果如下图:

具体实现代码如下:

 1 final String[] names = {"姚明","科比","詹姆斯"};//列表中显示的内容组成的数组
2 new AlertDialog.Builder(this)
3 .setTitle("列表对话框")//对话框标题
4 .setItems(names, new DialogInterface.OnClickListener() {//每一条的名称
5 public void onClick(DialogInterface dialog, int which) {//响应点击事件
6 Toast.makeText(MainActivity.this, names[which], 1).show();
7 }
8 })
9 .setPositiveButton("确定", new DialogInterface.OnClickListener() {//响应确定键的点击事件
10
11 @Override
12 public void onClick(DialogInterface dialog, int which) {
13 //do something
14 }
15 })
16 .show();

在设置列表显示时我们用到了setItems,在setItems中有(CharSequence[] items, OnClickListener listener)这样的参数,其中第一个参数是列表显示中的每一个条目的名称的数组,第二个是点击一个列表显示条目时的响应事件,所以在这里我们可以事先定义好一个数组来存放要显示的列表名称。这样在用时就方便多了。在条件点击影响事件时我们要实现onclick事件,这里也有一个参数which,它在API中的解释为which The button that was clicked (e.g. DialogInterface.BUTTON1) or the position of the item clicked.它和上面的which一样,也是代表一个唯一的数值。它在这里代表的是自己定义的那个存放列表名称的数组的下标值,因此我们可以通过下标来访问数组中的数值。当然我们也可以在列表对话框中增加button,这样也是可以的,我们当然也可以为这个button做响应事件。这里我就不多说了。

<三>单选按钮对话框

单选按钮对话框的运行效果如下:

具体实现代码如下:

 1 final String[] lang = {"NBA","英超","西甲"} ;
2 new AlertDialog.Builder(this)
3 .setTitle("单选按钮对话框")//标题
4 .setSingleChoiceItems(lang,0,new DialogInterface.OnClickListener() {//设置条目
5 public void onClick(DialogInterface dialog, int which) {//响应事件
6 // do something
7 //关闭对话框
8 dialog.dismiss();
9 }
10 })
11 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
12
13 @Override
14 public void onClick(DialogInterface dialog, int which) {
15 //do something
16 }
17 })//添加button并响应点击事件
18 .show();

在设置列表显示时我们用到了setSingleChoiceItems,在setSingleChoiceItems中有(CharSequence[] items, int checkedItem,OnClickListener listener)
这样的参数,其中第一个参数是列表显示中的每一个条目的名称的数组,第二个是默认让哪一个条目被选择上,如上面的代码,我让第一条被默认选上,所以我就在checkedItem这个参数这里写上第一条在数组中的下标值0,如果我默认都没被选上,我就在这里写上-1,第三个是点击一个列表显示条目时的响应事件,所以在这里我们可以事先定义好一个数组来存放要显示的列表名称。这样在用时就方便多了。在条件点击影响事件时我们要实现onclick事件,这里也有一个参数which,它在API中的解释为which The button that was clicked (e.g. DialogInterface.BUTTON1) or the position of the item clicked.它和上面的which一样,也是代表一个唯一的数值。它在这里代表的是自己定义的那个存放列表名称的数组的下标值,因此我们可以通过下标来访问数组中的数值。在点击完我们可以设置让这个对话框消失,这里可以用dialog.dismiss();让对话框消失。当然我们也可以在列表对话框中增加button,这样也是可以的,我们当然也可以为这个button做响应事件。这里我就不多说了。

<四>多选按钮对话框

多选按钮对话框的运行效果如下:

 1 final String[] langs = { "NBA", "西甲", "英超" };
2 final boolean[] selected = new boolean[] { true, false, true };// 一个存放Boolean值的数组
3 new AlertDialog.Builder(this)
4 .setTitle("多选列表对话框")
5 // 标题
6 .setMultiChoiceItems(langs, selected,
7 new DialogInterface.OnMultiChoiceClickListener() {// 设置多选条目
8 public void onClick(DialogInterface dialog,int which, boolean isChecked) {
9 // do something
10 }
11 })
12 .setPositiveButton("确定",
13 new DialogInterface.OnClickListener() {
14 public void onClick(DialogInterface dialog,
15 int which) {
16 // do something
17 }
18 }).show();

在多选按钮对话框中,我们用setMultiChoiceItems来设置多选按钮,这里setMultiChoiceItems中的参数为(CharSequence[] items, boolean[] checkedItems, OnMultiChoiceClickListener listener),第一个参数为要显示的条目的名称的数组,这里我们用一个String型的数组来存放,第二个是一个默认哪些按钮被选中的Boolean型数组,这里,我让下标为0和为2的条目默认被选中,当然,我们也可以事先定义好一个Boolean型数组。第三个参数就是点击多选按钮条目时的响应事件。在这个onClick事件中,同样有三个参数(DialogInterfacedialog, int which, boolean isChecked),第一个参数代表的是这个对话框,第二个参数代表的是String数组中存放的数值的下标值。第三个参数代表的是Boolean数组中的boolean值。当然我们也可以在列表对话框中增加button,这样也是可以的,我们当然也可以为这个button做响应事件。这里我就不多说了。

以上就是Android中的四种对话框形式,在用的时候我们要学会灵活运用,不要局限于一种特定的形式,我们可以设计自己的对话框。不要被思想所束缚。

2,像列表这种选择项的弹出式对话框,要改变样式一般都采取重写layout方式

今天才了解到 其实可以自定义样式,与大家分享下,其实很简

AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.AlertDialogCustom));

然后自定义自己的样式就可以了

<?xml version="1.0" encoding="utf-8"?>

<resources>

<style name="AlertDialogCustom" parent="@android:style/AlertDialog">

<item name="android:textColor">#00FF00</item>

<item name="android:typeface">monospace</item>

<item name="android:textSize">10sp</item>

</style>

</resources>

然后是Dialog的样式

<style name="dialog" parent="@android:style/Theme.Dialog">
  <item name="android:windowFrame">@null</item>
  <item name="android:windowIsFloating">true</item>
  <item name="android:windowIsTranslucent">true</item>
  <item name="android:windowNoTitle">true</item>
  <item name="android:background">@android:color/transparent</item>
  <item name="android:windowBackground">@android:color/transparent</item>
  <item name="android:backgroundDimEnabled">true</item>
  <item name="android:backgroundDimAmount">0.6</item>
 </style>

android的对话框的更多相关文章

  1. Android系统对话框——自定义关闭

    Android系统对话框--自定义关闭 Dialog是我们在项目中经常用到的,5.x以后的Dialog也很好看,很安卓风,Android也给我们提供了新的包,低版本可以显示一样的效果.我们在使用的导入 ...

  2. Android系统对话框

    Android系统对话框 效果图 2个按钮的对话框 3个按钮的对话框 自定义View的对话框 单选对话框 多选对话框 列表框 Code XML <?xml version="1.0&q ...

  3. Android Dialog对话框的七种形式的使用

    参考资料:http://www.oschina.net/question/54100_32486 注:代码进行了整理 在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询 ...

  4. Android自定义对话框

    在android中有自带的对话框,为了美观,很多开发者会使用自定义对话框,如下图: 点击“弹出自定义对话框按钮后”显示如图效果. 首先要自己定义一个xml文件定义自己对话框的样式: <?xml ...

  5. Android自定义对话框(Dialog)位置,大小

    代码: package angel.devil; import android.app.Activity;import android.app.Dialog;import android.os.Bun ...

  6. android常用对话框封装

    在android开发中,经常会用到对话框跟用户进行交互,方便用户可操作性:接下来就对常用对话框进行简单封装,避免在项目中出现冗余代码,加重后期项目的维护量:代码如有问题欢迎大家拍砖指正一起进步. 先贴 ...

  7. Android 自定义对话框

    Android实现自定义对话框效果: 核心代码: package com.example.diydialog; import android.os.Bundle; import android.app ...

  8. 【转】【Android】对话框 AlertDialog -- 不错不错

    原文网址:http://blog.csdn.net/feng88724/article/details/6171450 本讲介绍一下Android基本组件:对话框AlertDialog. API: j ...

  9. Android 自定义对话框(Dialog)位置,大小

    代码: package angel.devil; import android.app.Activity; import android.app.Dialog; import android.os.B ...

  10. android 33 对话框控件

    对话框控件:最多3个按钮. mainActivity.java package com.sxt.day05_09; import android.app.Activity; import androi ...

随机推荐

  1. 【iview input 回车刷页面bug】input 就一个的时候 有form的时候 回车会刷页面,如果就一个input,可以不要form,或者form里面两个input 将一个input v-show false 就可以了

    [iview input 回车刷页面bug]input 就一个的时候 有form的时候 回车会刷页面,如果就一个input,可以不要form,或者form里面两个input 将一个input v-sh ...

  2. [Android 测试] 压力稳定性测试之: Monkey 详解分析脚本(转载)

    一.什么是稳定性测试? 通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行. 二. Money是什么? Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模 ...

  3. 数据库:SQL Server自增长列的编号

    SQL Server表中的自动编号ID重新开始排列 说法一: 有两种方法: 方法1: truncate table 你的表名 --这样不但将数据删除,而且可以重新置位identity属性的字段. 方法 ...

  4. 编写shellcode的几种姿势

    今天开始在做hitcon-training的题目,做到lab2就发现了自己的知识盲区,遇到无法执行shell的情况,需要自己打shellcode执行cat flag 操作 经过一系列的搜索,发现了几种 ...

  5. PDO drivers no value 解决办法

    我的服务器是windos系统的,而且我也已经开启了PDO扩展,但是查看phpinfo的时候,结果却如下图: 解决办法 修改 php.ini 中的 extension_dir 路径即可! 将extens ...

  6. servlet上传多个文件(乱码解决)

    首先,建议将编码设置为GB2312,并在WEB-INF\lib里导入:commons-fileupload-1.3.jar和commons-io-2.4.jar, 可百度下下载,然后你编码完成后,上传 ...

  7. CSS规范(OOCSS SMACSS BEM)

    Css规范 OOCSS SMACSS BEM OOCSS(Object Oriented CSS)面向对象的css 主要分成四个部分 Template :模板 Grids :栅格布局 Module : ...

  8. 牛客网NOIP赛前集训营-提高组(第三场)A 管道维修

    https://www.nowcoder.com/acm/contest/174/A 这个的话  一个位置被清理的时间就是它到空白格子/边界的最短路对吧qww 然后求期望的话 假设它在第i步被清理掉的 ...

  9. CF-1099 D. Sum in the tree

    CF-1099 D. Sum in the tree 题意:结点序号为 1~n 的一个有根树,根序号为1,每个点有一个权值a[i], 然后定义一s[i]表示从根节点到 结点序号为i的结点的路途上所经过 ...

  10. PAT 乙级 1012

    题目 题目地址:PAT 乙级 1012 思路 最后一个测试点怎么也过不了,问题在于A2的判断,不能单纯地以0作为判断条件:假设满足A2条件的只有两个数6和6,计算结果仍然是0,但是输出A2的值是0不是 ...