增加按钮Adding buttons
这就是我一开始很想知道的究竟如何添加Yes/No,Ok/Cancel这样的按钮。原来是通过setPositiveButton(...)响应Yes/Ok的点击,setNeutralButton(...)响应中立行为的点击,setNegativeButton(...)响应No/Cancel的点击。注意,只能各自设置一个按钮来响应点击事件。
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to exit?")
       .setCancelable(false)
       .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                MyActivity.this.finish();
           }
       })
       .setNegativeButton("No", new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
           }
       });
AlertDialog alert = builder.create();
    首先,为这个对话框添加一个消息setMessage(CharSequence)。然后,开始函数链并设置该对话框为不能取消not cancelable (因此用户不能使用返回按钮关闭这个对话框)。对每个按钮,使用任一set...Button() 方法,比如setPositiveButton(),该方法接受按钮名称以及一个定义用户选中按钮后所采取动作的DialogInterface.OnClickListener。
增加一个列表Adding a list
final CharSequence[] items = {"Red", "Green", "Blue"};
 
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    }
});
AlertDialog alert = builder.create();
    首先,用setTitle(CharSequence)方法给对话框添加一个标题。然后,添加用setItems()添加一个可选项列表,该列表接受一组显示的items和一个DialogInterface.OnClickListener 来定义用户选中按钮后所采取动作。
增加复选框和单选按钮
要在对话框里创建一个多选项列表(checkboxes)或者单选项(radio buttons),可分别调用setMultiChoiceItems() 和setSingleChoiceItems() 方法。如果你在onCreateDialog()回调函数中创建这些可选列表,Android会帮你管理列表状态。只要这个活动是激活的,对话框会记住之前选中的items,但如果用户退出这个活动,用户选择将丢失。
注意: 为了在用户离开或暂停这个活动的时候能够保存选择,你必须通过活动生命期Activity Lifecycle来恰当的保存和恢复设置。为了永久保存选项,即使活动进程被完全终止,你需要使用数据存储Data Storage技术。
final CharSequence[] items = {"Red", "Green", "Blue"};
 
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
    }
});
AlertDialog alert = builder.create();
    setSingleChoiceItems() 的第二个参数是一个checkedItem整型数值,指示了基于0的缺省选择项的位置。“-1”代表不会有默认选择项。

进度对话框Progress Dialog的使用
ProgressDialog是AlertDialog类的一个扩展,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。
可以简单地通过调用ProgressDialog.show()方法来显示一个进度对话框,而通过onCreateDialog(int)回调管理这个对话框是可选的,如下所示:
ProgressDialog.show(this, // context
    "", // title
    "Loading. Please wait...", // message
    true); //进度是否是不确定的,这只和创建进度条有关
进度对话框的缺省类型是一个旋转轮,运行看到的是以下效果:
由于ProgressDialog是AlertDialog的扩展类,所以ProgressDialog也能设置按钮,比如一个取消下载的按钮。不过要注意的是,和前面的AlertDialog.Builder不同,ProgressDialog是调用AlertDialog的setButton,setButton2,setButton3函数,这些函数没有明确哪个是正面/中立/负面的,由我们决定。
显示进度条Showing a progress bar
而选择动画进度条显示进度:
1.   用类构造器初始化进度对话框,ProgressDialog(Context)。
2.   用setProgressStyle(int)方法设置进度风格为"STYLE_HORIZONTAL"以及设置其它属性,比如消息。
创建ProgressDialog大概是这样的:
ProgressDialog progressDialog = new ProgressDialog(getApplicationContext()); 
 
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
progressDialog.setIcon(R.drawable.alert_dialog_icon); 
progressDialog.setMessage("Loading..."); 
progressDialog.setCancelable(false); 
3.   当你准备显示这个对话框时,调用show()或者从onCreateDialog(int)回调中返回ProgressDialog。
4.   你可以通过调用setProgress(int)设置当前进度百分比或者调用incrementProgressBy(int)方法增加进度值。
官方文档提供了如何在另一线程来跟踪进程进度,让进度值变化。对此可以参考http://androidappdocs.appspot.com/guide/topics/ui/dialogs.html里面的代码。也可以查看后面的文章《有关Android线程的学习》里面的例子,看看如何使用Handler, Message机制!

创建自定义对话框Creating a Custom Dialog
创建自定义对话框,首先要创建一个Layout xml 文件,在此不啰嗦了。然后加载Layout有两种方法,也是非常熟悉的那两种方法:
1. setContentView(int resources id)
2. 利用LayoutInflater加载
官方还提示我们,一般使用Dialog类来创建对话框,是需要setTitle的,不设置的话,标题占用的空间保持为空,但仍然可见。而不想要那个标题,那应该使用警告对话框AlertDialog来创建自定义对话框。然而,因为警告对话框可以很简单的通过AlertDialog.Builder 类来创建,你并不需要访问上面使用的setContentView(int) 方法。相反,你必须使用setView(View),则需要使用LayoutInflater来加载Layout得到View。

转载于:https://blog.51cto.com/zhaohaiyang/487052

android对话框的使用(下)相关推荐

  1. Android 对话框(Dialog)大全 建立你自己的对话框

    Android 对话框(Dialog)大全 建立你自己的对话框 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户 ...

  2. Android对话框和帧动画

    Android对话框 在一个例子中展示四种对话框. 设置四个按钮 <LinearLayout xmlns:android="http://schemas.android.com/apk ...

  3. android 对话框 美化,Android修改Dialog样式

    Android 对话框支持自定义标题,内容,按钮和点击事件,基本上可以满足我们日常的使用. 但有时候我们想要修改对话框的文字,按钮颜色等,系统并没有提供对应的方法,正常情况下只能自定义布局. 接下来通 ...

  4. java android对话框_java - 防止Android活动对话框关闭外部触摸

    18个解决方案 327 votes 要防止对话框在按下后退键时被解除,请使用此选项 dialog.setCancelable(false); 并且为防止对话框在外部触摸时被解雇,请使用此功能 dial ...

  5. android 4.4 禁止下拉,Android开发中禁止下拉式的实现技巧

    我们开发项目的时候,经常会看到禁止的情况,而Android开发中并没有直接调用的接口,下面是爱站技术频道小编就给大家介绍的Android开发中禁止下拉式的实现技巧,希望网友们喜欢! 分享给大家供大家参 ...

  6. linux android编译环境,Linux下Android开发安装环境配置

    --1.概述 为什么要在Linux搭建开发环境呢?从直观来说,Android虚拟机在Linux下运行速度更快,而且性能更稳定. 我使用的Linux环境是ubuntu-10.10-desktop-i38 ...

  7. Android 5.0 SEAndroid下如何获得对一个内核节点的访问权限

    Android 5.0下,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问. 本文将以用户自定义的内核节点/de ...

  8. android 创建虚拟内存,在 Android 的 /data 目录下添加虚拟内存

    在 Android 的 /data 目录下添加虚拟内存 Android 系统上添加虚拟内存已经不是什么新鲜事了, 很多手机都支持, 通常都是将虚拟内存添加到 SD 卡上, 不过由于 SD 卡的的读写速 ...

  9. Android免Root环境下Hook框架Legend原理分析

    0x1 应用场景 现如今,免Root环境下的逆向分析已经成为一种潮流! 在2015年之前的iOS软件逆向工程领域,要想对iOS平台上的软件进行逆向工程分析,越狱iOS设备与安装Cydia是必须的!几乎 ...

最新文章

  1. eclipse安装Spket插件
  2. leetcode 206 Reverse Linked List
  3. 如何设置putty远程登录linux
  4. java enum判断_Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)
  5. 顺序表和链表的优缺点理解
  6. 工作51:后端vue学习地址
  7. 《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets
  8. php成品网站安装,PHPweb成品网站安装环境要求和安装方法
  9. 每天一个linux命令-curl命令
  10. 关于文件的INode与Java中的文件操作接口
  11. centos 阿帕奇无法解析php_PHP之校园连接企业之路-2
  12. 刷leetcode不知道从哪里刷起?? 来看看,我把刷题题目顺序都排好了,每道题还带详细题解!
  13. thinkphp group count连用
  14. ELKF(Elasticsearch+Logstash+ Kibana+ Filebeat) 部署
  15. 背包九讲-第三讲 多重背包
  16. 信号硬件入门--振幅调制信号发生器(正弦波发生器方案、AM调制方案)--First理论部分
  17. c# 爬网教程_Python Web爬网教程
  18. java框架-Springmvc-quzrtz-jasperreport-pio-pdfbox-jedis
  19. 使用IDEA+gradle构建spring5源码-手把手教程全图解
  20. 天津科技大学计算机西电,学通信工程专业,大学四年该如何规划?谢谢

热门文章

  1. php中perl配置,配置Apache及运行perl,php
  2. JAVA批量上传下载Excel_如何实现批量上传----------Java解析excel
  3. android源代码居中字体,Android (布局优化) TextView实现drawable图标大小 位置与第一行文本居中...
  4. 面试不怂之redis与缓存大全
  5. canal下载 linux_canal实时同步mysql数据到redis或ElasticSearch
  6. flat在java中的含义_java – 在flatingBy中使用flatMap的优雅方法
  7. 阿米洛键盘取消win_【机械键盘】2020年双十二那些值得购买的机械键盘推荐
  8. 文本数据 php,PHP对文本数据库的基本操作方法
  9. 无法访问linux mysql_远程无法访问linux Mysql解决方案(转)
  10. 深职院计算机学院教室,机电学院计算机专业赴深职院为国赛训练取经