一.Dialog介绍

dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。

Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框.

Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造

  1. java.lang.Object
  2. android.app.Dialog
  3.  
  4. Known Direct Subclasses(直接子类)
  5. AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation
  6.  
  7. Known Indirect Subclasses(间接子类)
  8. DatePickerDialog, ProgressDialog, TimePickerDialog

二.AlertDialog

AlertDialog是Dialog的一个直接子类, 我们通常用 AlertDialog.Builder 直接实例化一个对话框对象。

AlertDialog主要包括警告框,单选框,多选框,下拉列表弹出框,自定义弹出框(自己创建一个弹出界面)

界面设计xml文件(main_activity.xml)如下:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity"
  10. android:orientation="vertical">
  11.  
  12. <Button
  13.  
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:text="创建对话框"
  17. android:onClick="click1" />
  18. <Button
  19. android:layout_width="wrap_content"
  20. android:layout_height="wrap_content"
  21. android:text="创建单选框"
  22. android:onClick="click2" />
  23. <Button
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:text="创建多选框"
  27. android:onClick="click3"
  28. />
  29. <Button
  30. android:layout_width="wrap_content"
  31. android:layout_height="wrap_content"
  32. android:text="创建下拉框/和message不同"
  33. android:onClick="click4"
  34. />
  35.  
  36. <Button
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:text="获取用户名和密码"
  40. android:onClick="click5"
  41. />
  42.  
  43. </LinearLayout>

自定义xml界面(dialog.xml)文件代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <EditText
  8. android:id="@+id/username"
  9. android:layout_width="match_parent"
  10. android:layout_height="wrap_content"
  11. android:hint="请输入用户名"
  12. />
  13. <EditText
  14. android:id="@+id/password"
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content"
  17. android:hint="请输入密码"
  18. />
  19.  
  20. </LinearLayout>

 Java文件代码如下:

  1. package com.wyy.dialog;
  2.  
  3. import android.os.Bundle;
  4. import android.app.Activity;
  5. import android.app.AlertDialog;
  6. import android.app.AlertDialog.Builder;
  7. import android.app.Dialog;
  8. import android.content.DialogInterface;
  9. import android.content.DialogInterface.OnClickListener;
  10. import android.content.DialogInterface.OnMultiChoiceClickListener;
  11. import android.text.style.BulletSpan;
  12. import android.view.LayoutInflater;
  13. import android.view.Menu;
  14. import android.view.View;
  15. import android.widget.EditText;
  16. import android.widget.Toast;
  17.  
  18. public class MainActivity extends Activity {
  19.  
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main);
  24. }
  25.  
  26. public void click1(View v){
  27.  
  28. AlertDialog.Builder builder=new Builder(this);
  29. builder.setIcon(TRIM_MEMORY_BACKGROUND);
  30. builder.setTitle("请选择:");
  31. builder.setMessage("工作 重要还是生活重要?");
  32.  
  33. builder.setPositiveButton("工作", new OnClickListener() {
  34.  
  35. @Override
  36. public void onClick(DialogInterface dialog, int which) {
  37. // TODO Auto-generated method stub
  38.  
  39. Toast.makeText(MainActivity.this, "工作不是为了更好的生活吗?", 0).show();
  40.  
  41. }
  42. } );
  43.  
  44. builder.setNegativeButton("生活", new OnClickListener() {
  45.  
  46. @Override
  47. public void onClick(DialogInterface dialog, int which) {
  48. // TODO Auto-generated method stub
  49. Toast.makeText(MainActivity.this, "工作可能让你更有存在感", 0).show();
  50.  
  51. }
  52. } );
  53.  
  54. builder.setNeutralButton("忽略", new OnClickListener() {
  55.  
  56. @Override
  57. public void onClick(DialogInterface dialog, int which) {
  58. // TODO Auto-generated method stub
  59.  
  60. Toast.makeText(MainActivity.this, "neutral"+which, 0).show();
  61.  
  62. }
  63. });
  64.  
  65. AlertDialog ad=builder.create();
  66. ad.show();
  67.  
  68. }
  69.  
  70. public void click2(View v){
  71. AlertDialog.Builder builder=new Builder(this);
  72. builder.setTitle("请选择您的性别");
  73. final String[] items=new String[]{"男","女","其他"};
  74. builder.setSingleChoiceItems(items, -1,new OnClickListener() {
  75.  
  76. @Override
  77. public void onClick(DialogInterface dialog, int which) {
  78. // TODO Auto-generated method stub
  79. Toast.makeText(MainActivity.this,"您选择了"+items[which], 0).show();
  80. dialog.dismiss();
  81.  
  82. }
  83.  
  84. } );
  85. builder.show();
  86.  
  87. }
  88.  
  89. public void click3(View v){
  90. AlertDialog.Builder builder=new Builder(this);
  91. builder.setTitle("谁是最帅的明星");
  1. /**
  2. * 第一个参数指定我们要显示的一组下拉多选框的数据集合
  3. * 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
  4. * 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
  5. * 第三个参数给每一个多选项绑定一个监听器
  6. */
  1. final String[] items=new String[]{"胡歌","霍建华","李易峰","杨洋"};
    final boolean[] checkedItems=new boolean[]{true,false,true,false};
  2.  
  3. builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
  4.  
  5. @Override
  6. public void onClick(DialogInterface dialog, int which, boolean isChecked) {
  7. // TODO Auto-generated method stub
  8. checkedItems[which]=isChecked;
  9. }
  10.  
  11. });
  12.  
  13. builder.setPositiveButton("确定", new OnClickListener() {
  14.  
  15. @Override
  16. public void onClick(DialogInterface dialog, int which) {
  17. // TODO Auto-generated method stub
  18. String text="";
  19. for(int i=0;i<4;i++){
  20. text+=checkedItems[i]?items[i]+",":"";
  21. }
  22.  
  23. Toast.makeText(MainActivity.this, text, 0).show();
  24. dialog.dismiss();
  25. }
  26.  
  27. });
  28.  
  29. builder.setNegativeButton("取消", new OnClickListener() {
  30.  
  31. @Override
  32. public void onClick(DialogInterface dialog, int which) {
  33. // TODO Auto-generated method stub
  34.  
  35. }
  36. });
  37.  
  38. builder.show();
  39.  
  40. }
  41.  
  42. public void click4(View v){
  43. AlertDialog.Builder builder=new Builder(this);
  44. builder.setIcon(R.drawable.ic_launcher);
  45. builder.setTitle("请选择你喜欢的城市");
  46.  
  47. final String[] items=new String[]{"北京","上海","南京","深圳","南阳"};
  48.  
  49. builder.setSingleChoiceItems(items, -1, new OnClickListener() {
  50.  
  51. @Override
  52. public void onClick(DialogInterface dialog, int which) {
  53. // TODO Auto-generated method stub
  54.  
  55. Toast.makeText(MainActivity.this, "您选择的城市是:"+items[which], 0).show();
  56.  
  57. }
  58. });
  59.  
  60. builder.show();
  61.  
  62. }
  63.  
  64. public void click5(View v){
  65. AlertDialog.Builder builder=new Builder(this);
  66. builder.setIcon(R.drawable.ic_launcher);
  67. builder.setTitle("请输入用户名和密码");

  68. View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
  69. builder.setView(view);
  70.  
  71. final EditText username=(EditText) findViewById(R.id.username);
  72. final EditText password=(EditText) findViewById(R.id.password);
  73.  
  74. builder.setPositiveButton("确定", new OnClickListener() {
  75.  
  76. @Override
  77. public void onClick(DialogInterface dialog, int which) {
  78. // TODO Auto-generated method stub
  79.  
  80. String a=username.getText().toString().trim();
  81. String b=password.getText().toString().trim();
  82.  
  83. Toast.makeText(MainActivity.this, "用户名:"+a+",密码:"+b, 0).show();
  84.  
  85. }
  86. });
  87.  
  88. builder.setNegativeButton("取消", new OnClickListener() {
  89.  
  90. @Override
  91. public void onClick(DialogInterface dialog, int which) {
  92. // TODO Auto-generated method stub
  93.  
  94. }
  95. });
  96.  
  97. builder.show();
  98.  
  99. }
  100. }

1.对话框1

我们设置了3个action buttons,每一个button都为其绑定了一个 DialogInterface.OnClickListener() 的监听事件,然后在里面通过Toast吐司对话框来弹出一下我们的一些信息,which方法表示的是action button所代表的int值,which=-1就表示点击的是确定按钮,-2表示点击的是取消按钮,-3表示点击的是忽略按钮

2.下拉框

我们设置setItems(CharSequence[] items, DialogInterface.OnClickListener listener) 方法来设置我们的一个下拉列表框。注意:因为下拉列表框或者是下拉多选框这些都是显示在Content中的,所以message和下拉列表框这些是不能够同时存在的

我们也可以给其绑定一个DialogInterface.OnClickListener监听器,当选中一个选项时,对话框就会消失掉。这里的which代表的是下拉列表的每个选项的索引,通过这个我们可以轻松得到用户选中的是哪一个选项。

3.下拉单选框

在弹出下拉单选框时,当我们选中一个选项,对话框是不会消失的,我们需要点击action button才能让对话框消失

4.下拉多选框

设置下拉多选框时使用的是setMultiChoiceItems方法

5.自定义弹出对话框

对于自定义弹出对话框,我们就需要自己指定一个自定义的布局文件。

首先需要写一个xml的布局文件,然后在里面定义我们的布局,我们不需要在布局文件里定义Button按钮,可以通过 AlertDialog.Builder 来设置 action buttons。

通过 View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null); 我们可以将我们的布局文件加载进来,得到一个View对象,然后通过 AlertDialog.Builder 的setView方法来设置我们的自定义弹出框。

 

Android UI系列--对话框(一)(AlertDialog,TimePickerDialog,DatePickerDialog,ProgressDialog)的更多相关文章

  1. Android UI系列-----时间、日期、Toasts和进度条Dialog

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  2. 【转】Android UI系列-----时间、日期、Toasts和进度条Dialog

    原文网址:http://www.cnblogs.com/xiaoluo501395377/p/3421727.html 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注 ...

  3. Android UI系列-----Dialog对话框

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  4. android中常见对话框之一AlertDialog

    在Android应用中,有多种对话框:Dialog.AlertDialog.ProgressDialog.时间.日期等对话框. (1)Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽 ...

  5. Android中弹出对话框,AlertDialog关键代码

    写在这里便于以后查看. Android中弹出对话框的关键代码: btn01.setOnClickListener(new OnClickListener() { @Override public vo ...

  6. android 简单列表对话框(AlertDialog.Builder().setItems())

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  7. ANDROID 系统提示对话框(ALERTDIALOG)的使用

    new AlertDialog.Builder(baseActivity).setTitle("删除确认")//设置对话框标题 .setMessage("您确定要删除选中 ...

  8. Android UI系列-----ScrollView和HorizontalScrollView

    本篇随笔将讲解一下Android当中比较常用的两个布局容器--ScrollView和HorizontalScrollView,从字面意义上来看也是非常的简单的,ScrollView就是一个可以滚动的V ...

  9. Android UI系列-----EditText和AutoCompleteTextView

    在这篇随笔里将主要讲解一下EditText和AutoCompleteTextView这个控件 1.EditText 首先我们先简单来说说EditText这个控件,这个就相当于我们平常web开发中的文本 ...

随机推荐

  1. 第11天:JS中变量、字符串基础知识

    一.js简介用来制作页面交互效果,提高用户体验. js页面效果:轮播图.选项卡.地图.表单验证javascript是弱变量类型的语言,变量只需要用var来声明.而java要根据变 量类型来声明, in ...

  2. koa2 controller中实现类似sleep的延迟功能

    今天有同事问我如何在koa2中的controller中使用延迟执行的功能,他直接在controller中使用setTimeout,但是没效果. 错误的代码类似下面这样: // 错误的方法 export ...

  3. - Templates should only be responsible for mapping the state to the UI. Avoid placing tags with side-effects in your templates, such as <script>, as they will not be parsed.

    vue.js报错如下: - Templates should only be responsible for mapping the state to the UI. Avoid placing ta ...

  4. js 在遍历时只会显示最后一个遍历到的结果

    在做项目时遇到了一个关于遍历的问题, 前提是:在ul中有n个li每个li从后台获取的数据中有一个sign的字段,当sign等于0时(li未被点击过)li会显示一个红点,当sign不等于0时(li已被点 ...

  5. 线性代数-矩阵-【5】矩阵化简 C和C++实现

    点击这里可以跳转至 [1]矩阵汇总:http://www.cnblogs.com/HongYi-Liang/p/7287369.html [2]矩阵生成:http://www.cnblogs.com/ ...

  6. oracle时间范围查询

    当时间精确到秒的指标和时间精确到日的时间进行对比是恒不等于的,但是可以判断大于或者等于的情况. 举个例子,指标[时间精确到秒] select 时间精确到秒 from table where 时间精确到 ...

  7. Bootstrap-table事件使用

    HTML <div class="alert alert-danger" id="eventInfo"></div> <table ...

  8. 【转】Spring AOP 实现之CGLIB

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp91    cglib(Code Generation Library)是 ...

  9. yum安装mariadb-galera同步

    节点             ip地址      hostname                            系统版本   程序版本 node1 10.4.90.90 mysql1 db1 ...

  10. windows系统,优化C盘空间的方法

    C盘在使用过程中,内容会越来越多,剩余空间越来越小.如何清理出更多空间呢?以windows7为例 转载请保留 http://www.cnblogs.com/lion-zheng/ cleanmgr w ...