Android中经常会需要在Android界面上弹出一些对话框提示用户,比如App的退出的时候都会有各种框来挽留你的心,支付宝的时候输入密码的密码框,非常常见及其实用的功能,类似于JS中的alter,C#中C/S中常用MessgeBox,总而言之就是一个功能弹,弹,弹,本文就简单的叙述一下Dialog的各种弹框使用及监听,顺便写了一个简单的自定义弹框,接下来请看正文:

一般对话框

先看下整个App页面:

看下一般对话框的结果:

具体代码的实现,其中定义了两个按钮,一个是确定(PositiveButton)按钮,一个是取消(NegativeButton)按钮:

	builder = new AlertDialog.Builder(this);
builder.setTitle("亲,你真的要离开吗?");
// 相当于确定
builder.setPositiveButton("退出",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "是的,哥要走了",
Toast.LENGTH_SHORT).show();
}
});
// 相当于取消
builder.setNegativeButton("再看看",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "行,哥再看会",
Toast.LENGTH_SHORT).show();
}
}); builder.show();

 ICON对话框

上面只是用到了两个按钮,其实还有一个是中立按钮,另外发现每次都写一个监听事件感觉太麻烦了,可以单独写一个监听事件去判断哪个事件被触发了:

单独定义个DialogClickListener:

	private DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {

		@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
Toast.makeText(MainActivity.this, "强烈支持" + which,
Toast.LENGTH_SHORT).show();
break;
case DialogInterface.BUTTON_NEUTRAL:
Toast.makeText(MainActivity.this, "跟我无关,我是中立的" + which,
Toast.LENGTH_SHORT).show();
break;
case DialogInterface.BUTTON_NEGATIVE:
Toast.makeText(MainActivity.this, "强烈反对" + which,
Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};

  按钮事件的调用:

	builder = new AlertDialog.Builder(this);
builder.setTitle("XX视频");
builder.setIcon(android.R.drawable.btn_star);
builder.setMessage("如何看待香港占中事件?");
builder.setPositiveButton("支持", dialogClickListener);
builder.setNegativeButton("反对", dialogClickListener);
// 中立
builder.setNeutralButton("中立", dialogClickListener);
builder.show();

列表对话框

看下效果图:

代码实现:

		builder = new AlertDialog.Builder(this);
builder.setTitle("NBA幻觉");
builder.setIcon(android.R.drawable.btn_star);
final String[] nameArrStrings = new String[] { "马刺很老", "小牛很弱",
"火箭很强" };
builder.setItems(nameArrStrings, new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, nameArrStrings[which],
Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub }
});
builder.setNegativeButton("取消", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub }
});
builder.show();

  单选对话框

效果图:

代码实现:

	builder = new AlertDialog.Builder(this);
builder.setTitle("NBA球队");
builder.setIcon(android.R.drawable.btn_radio);
final String[] ballArr = new String[] { "骑士", "热火", "凯尔特人" };
builder.setSingleChoiceItems(ballArr, 1, new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, ballArr[which],
Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub }
});
builder.setNegativeButton("取消", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub }
});
builder.show();

  多选对话框

效果图:

代码实现:

	builder = new AlertDialog.Builder(this);
builder.setTitle("NBA球星");
builder.setIcon(android.R.drawable.btn_radio);
final String[] ballstartArr = new String[] { "邓肯", "诺维斯基", "莱昂纳德",
"科比" };
final boolean[] multiCheckedArrStrings = new boolean[] { true,
false, true, false };
builder.setMultiChoiceItems(ballstartArr, multiCheckedArrStrings,
new OnMultiChoiceClickListener() { @Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
// TODO Auto-generated method stub
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < multiCheckedArrStrings.length; i++) {
if (multiCheckedArrStrings[i]) {
buffer.append(ballstartArr[i] + ",");
}
}
buffer.deleteCharAt(buffer.length() - 1);
Toast.makeText(MainActivity.this, buffer,
Toast.LENGTH_SHORT).show();
}
}); builder.setPositiveButton("确定", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub }
});
builder.show();

  文本对话框

比如说支付宝,转账的时候你需要输入密码,弹出一个密码输入框,效果如图:

代码实现,,这个时候你需要给builder中的view赋值:

		builder = new AlertDialog.Builder(this);
builder.setTitle("输入密码");
builder.setIcon(android.R.drawable.btn_star);
final EditText editText = new EditText(MainActivity.this);
builder.setView(editText);
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"输入的密码是:" + editText.getText(),
Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "取消",
Toast.LENGTH_SHORT).show();
}
}); builder.show();

  自定义对话框

上面的那个EditText是创建的,其实可以自定义一个布局,然后通过填充进去,效果如下:

自定义一个dialog_text.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密码:" /> <EditText
android:id="@+id/edit_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>

  代码实现:

		builder = new AlertDialog.Builder(this);
builder.setTitle("输入密码");
builder.setIcon(android.R.drawable.btn_star);
final EditText editText = new EditText(MainActivity.this);
builder.setView(editText);
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,
"输入的密码是:" + editText.getText(),
Toast.LENGTH_SHORT).show();
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "取消",
Toast.LENGTH_SHORT).show();
}
}); builder.show();

------------2015.11.15更新---忘记写了,还有一种是进度条对话框,简单的进度对话框和带进度的对话框-----

代码如下:

	ProgressDialog  progressDialog=new  ProgressDialog(this);
progressDialog.setTitle("XX助手");
progressDialog.setMessage("XX正在更新。。。");
progressDialog.show();

显示进度的对话框:

代码如下:

		final ProgressDialog  precentDialog=new  ProgressDialog(this);
precentDialog.setTitle("XX下载");
precentDialog.setMessage("XX正在更新。。。");
precentDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
precentDialog.setMax(100);
precentDialog.show();
new Thread(){
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
precentDialog.setProgress(i);
}
precentDialog.dismiss();
};
}.start();  

Android中Dialog对话框的调用及监听的更多相关文章

  1. Android中Dialog对话框

    布局文件xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  2. (原)android中的动画(三)之动画监听&页面切换动画

    1.动画也可以设置监听事件,例如在动画结束时需要执行某操作 把要执行的代码写在onAnimationEnd()回调方法中即可: anim.setAnimationListener(new Animat ...

  3. android 中单选和复选框监听操作

    单选按钮RadioGroup.复选框CheckBox都有OnCheckedChangeListener事件,我们一起了解一下. package com.genwoxue.oncheckedchange ...

  4. android中listview点击事件的监听实现

    listview_bookmark.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public vo ...

  5. android从Dialog对话框中取得文本文字

    android中Dialog对话框获取文本文字,只需要使用editor的getText方法就可以获得,示例如下:final EditText et = new EditText(this); et.s ...

  6. Android中的对话框AlertDialog使用技巧合集-转载

    Android中的对话框AlertDialog使用技巧合集     文章来自:http://blog.csdn.net/blue6626/article/details/6641105   今天我用自 ...

  7. Android 中Dialog的使用

    本文是参考ProAndroid的第10章Working with Dialogs的内容,在合适的地方添加了作者自己的一些见解最终成文. Android 中的对话框是一个展示在当前窗口上的小一号的窗口, ...

  8. Android中Dialog

    在Android中,Dialog是一个非常重要的UI, 它可以方便的给用户提示,用最简洁的方式向用户展示信息, 以下的图片是Dialog的一个整体架构,通过它,可以总体对Dialog有一个很清晰的认识 ...

  9. [原]MFC中DIALOG(对话框)程序响应加速键(快捷键)

    [原]MFC中DIALOG(对话框)程序响应加速键(快捷键) 2014-8-6阅读266 评论0 新建一个对话框程序,项目名为Test,删除默认确定,取消和静态文本框控件.添加一个按钮,Caption ...

随机推荐

  1. Java 中的 I/O

    I/O 指的是 input 和 output ,也就是输入和输出,我们说的是 Java 中的 I/O,那我们就在站在虚拟机的角度去看看有哪些输入和输出.输入又可以称为数据源端,能想到的会有,文件,网络 ...

  2. 美团DB数据同步到数据仓库的架构与实践

    背景 在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为ODS(Operational Data Store)数据.在互联网企业中,常见的ODS数据有业务日志数据(Log)和业务DB数据( ...

  3. mysql常见知识点

    最近整理了一些数据库常见的面试题,对自己也是个复习,希望对大家也有所帮助. 1.触发器的作用? 触发器是一类特殊的存储过程,主要是通过事件来触发而被执行的.它可以强化约束,来维护数据的完整性和一致性, ...

  4. 面向对象设计原则 开放封闭原则(Open Closed Principle)

    开放封闭原则(OCP,Open Closed Principle) 开放封闭原则是所有面向对象原则的核心. 软件设计本身所追求的目标就是封装变化.降低耦合,而开放封闭原则正是对这一目标的最直接体现. ...

  5. ngx_lua应用最佳实践

    引子: 以下文字,是UPYUN系统开发工程师timebug在SegmentFault D-Day南京站技术沙龙上所做分享的内容要义提炼,主题为UPYUN系统开发团队在进行业务逻辑由C模块到ngx_lu ...

  6. 鸟哥的私房菜:Bash shell(四)-Bash shell的使用环境

    Bash shell(四)-Bash shell的使用环境   是否记得我们登入主机的时候,屏幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登入的时候,我们还可以给予使用者一些 ...

  7. BZOJ 4380 Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  8. ACdream 速攻组~

    1007 a + b /*这题就是一个快速幂,但是十分猥琐的是,模是1e10 + 7,不是1e9 + 7,这就产生了一个爆long long的问题.所以要对快速幂中的乘法操作进行一下改造.请教了BIT ...

  9. 读书笔记_Effective_C++_条款三十三:避免遮掩继承而来的名称

    名称的遮掩可以分成变量的遮掩与函数的遮掩两类,本质都是名字的查找方式导致的,当编译器要去查找一个名字时,它一旦找到一个相符的名字,就不会再往下去找了,因此遮掩本质上是优先查找哪个名字的问题. 而查找是 ...

  10. spring @Transactional注解无效

    <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jd ...