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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "是的,哥要走了",Toast.LENGTH_SHORT).show();}});// 相当于取消builder.setNegativeButton("再看看",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "行,哥再看会",Toast.LENGTH_SHORT).show();}});builder.show();

 ICON对话框

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

单独定义个DialogClickListener:

private DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubswitch (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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, nameArrStrings[which],Toast.LENGTH_SHORT).show();}});builder.setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}});builder.setNegativeButton("取消", new OnClickListener() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, ballArr[which],Toast.LENGTH_SHORT).show();}});builder.setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub}});builder.setNegativeButton("取消", new OnClickListener() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which,boolean isChecked) {// TODO Auto-generated method stubStringBuffer 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() {@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this,"输入的密码是:" + editText.getText(),Toast.LENGTH_SHORT).show();}});builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.makeText(MainActivity.this,"输入的密码是:" + editText.getText(),Toast.LENGTH_SHORT).show();}});builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubToast.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();  

更多相关文章

  1. Android(安卓)API Guides---Creating a Search Interface
  2. Android之微信开放平台实现分享(分享好友和朋友圈)
  3. 谈谈Android里的Context的使用!!!
  4. Android中用html代码来实现界面 WebView控件
  5. 【工作感悟】Android(安卓)开发者,如何提升自己的职场竞争力?
  6. Android(安卓)Studio如何取消与SVN的关联
  7. Android(安卓)错误:at java.lang.reflect.Method.invoke(Native M
  8. mars Android视频第14讲中代码出现的错误分析——Handler中的rem
  9. 为什么说模仿是最好的学习方法?

随机推荐

  1. Windows下mysql community server 8.0.16
  2. java连不上mysql8.0问题的解决方法
  3. mysql server 5.5连接不上的解决方法
  4. MySQL如何实现负载均衡功能
  5. MySQL表中添加时间戳的几种方法
  6. MySQL创建数据表并建立主外键关系详解
  7. mysql语句查询用户权限过程详解
  8. 基于python的mysql复制工具详解
  9. 为什么说MySQL单表数据不要超过500万行
  10. MySQL5.7.23解压版安装教程图文详解