<本文章仅作学习的笔记的目的,可能会有参考冲突与错误,请见谅。>

AlertDialog可以在当前页面里弹出一个对话框,它可以屏蔽其他UI控件的交互能力,以起到警示的作用,所以在实际设计时dialog会作为重要信息提示作用而存在。

dialog有以下几种形式:简单对话框,列表对话框,单选对话框,多选对话框,自定义对话框等。

1.简单对话框

  Button dig=(Button)findViewById(R.id.dig1);dig.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);//创建Alert builder对象dix.setIcon(R.mipmap.ic_launcher); //设置图标dix.setTitle("对话框");            //设置标题dix.setMessage("这是一个对话框");   //设置内容dix.setPositiveButton("进入界面", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//在此添加逻辑}});                  //确定方面事件响应dix.setNegativeButton("残忍的离开", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});                      //取消方面事件响应dix.show();//显示出对话框}});}

步骤具体为:a:创建 AlertDialog.Builder实例
b:设置实例的一些属性
c:设置positive与negetive的监听
d:show(),显示

当显示对话框后整个界面会被屏蔽,UI控件将无法使用。

2.列表对话框

   Button listdialog =(Button)findViewById(R.id.listdialog);listdialog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);//创建Alert builder对象dix.setIcon(R.mipmap.ic_launcher);    //设置图标dix.setTitle("选择编程语言");           //设置标题dix.setItems(arr, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(Activity14.this,"选择了"+arr[which],Toast.LENGTH_SHORT).show();}});   //传入arr,并且设置监听器dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});                   //确定方面事件响应dix.show();}});

实现步骤:1.final一个数组作为列表项
2.获取实例(同简单对话框),配置标题,图标等
3.配置ITEM,传入数组,设置监听器,在监听器里设置事件
4.显示对话框

3.单选对话框

   Button singlechoose=(Button)findViewById(R.id.singlechoose);singlechoose.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);//创建Alert builder对象dix.setIcon(R.mipmap.ic_launcher);    //设置图标dix.setTitle("选择编程语言");           //设置标题dix.setSingleChoiceItems(arr, 0, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {selectedId=which;Toast.makeText(Activity14.this,"选择了"+arr[which],Toast.LENGTH_SHORT).show();}});dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(Activity14.this,"最终选择了"+arr[selectedId],Toast.LENGTH_SHORT).show();}});                   //确定方面事件响应dix.show();}});

实现步骤:1.为了记录用户选择,我们需要在最外层添加 private int selectedId=0;
2.获取实例(同简单对话框),配置标题,图标等
3.配置singlechoiceitems,传入数组,设置默认选择为数组第0项,设置监听器,在监听器里设置事件
4.我们用int变量记录下最终的选择,传递给确定按钮
5.显示对话框

4.多选对话框

  Button chooses=(Button)findViewById(R.id.chooses);chooses.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {final String[] arr={"c语言","c++","java","python","HTML","c#"};   //常量定义数组chooselist.clear();AlertDialog.Builder dix=new AlertDialog.Builder(Activity14.this);//创建Alert builder对象dix.setIcon(R.mipmap.ic_launcher);    //设置图标dix.setTitle("选择编程语言");           //设置标题dix.setMultiChoiceItems(arr, new boolean[]{false, false, false,false, false, false}, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {if(isChecked){chooselist.add(which);}else{chooselist.remove(which);}Toast.makeText(Activity14.this,"用户的选择"+chooselist.toString(),Toast.LENGTH_SHORT).show();}});     //设置多选,传入数组,默认选择值,是否选中的逻辑  (如果选中,在数组里添加选项,如果没选中就移除选项)dix.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {//最后的toast提示,使用了tostring方法。Toast.makeText(Activity14.this,"最终选择了"+chooselist.toString(),Toast.LENGTH_SHORT).show();}});                   //确定方面事件响应dix.show();}});

实现步骤:1.为了记录用户选择,我们需要在代码开始添加 ArrayList chooselist=new ArrayList()用来储存用户选项;
2.获取实例(同简单对话框),配置标题,图标等
3.配置setMultiChoiceItems,传入数组,设置默认选择为全部false,设置监听器,在监听器里设置事件,监听器里的ischecked用来做判断
如果选中,则在数组里动态添加,如果没选中,则移除。
4.使用tostring方法提示选择。
5.显示对话框

5.自定义对话框

  Java代码public void bteClick(View v){LayoutInflater layoutInflater=LayoutInflater.from(this);    //设置反射器View my=layoutInflater.inflate(R.layout.layout_myself_dialog,null);//创建反射器视图my,(采用了反射器的inflate方法)AlertDialog.Builder builder=new AlertDialog.Builder(this);//创建对话框实例builder.setView(my);//设置好视图my.findViewById(R.id.btx).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dia.dismiss();}});my.findViewById(R.id.btx2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dia.dismiss();}});//获取按钮对象,设置监听dia=builder.create();    //显示出来dia.show();}

实现步骤:1.首先在点击弹出dialog的button的xml属性上添加
android:onClick=”bteClick”属性
2.为onclick属性添加逻辑
设置反射器,创建反射器视图,创建对话框实例然后设置视图,为视图上的按钮添加响应(这里不用使用button获取实例,而是直接把视图当作按钮看待,设置dismiss方法使对话框消失)
3.最后将对话框显示出来

自定义对话框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="wrap_content"android:orientation="vertical"><LinearLayout
        android:layout_width="match_parent"android:layout_height="40dp"android:background="#ffffff"android:gravity="center"android:orientation="horizontal"android:weightSum="1"><TextView
            android:text="音乐闹钟"android:textSize="18sp"android:textColor="#000"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="0.95" /></LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:padding="10dp"></LinearLayout><TimePicker
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/timePicker"android:layerType="software"android:layout_gravity="center_horizontal"/><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#ffffff"android:gravity="right"android:orientation="horizontal"android:weightSum="1"><Button
            android:id="@+id/btx2"android:text="                                                取消"android:textColor="#558544"android:textSize="15sp"android:background="#ffffff"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:layout_weight="0.99" /><Button
            android:id="@+id/btx"android:text="确定"android:textColor="#558544"android:textSize="15sp"android:background="#ffffff"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp" /></LinearLayout></LinearLayout>

上面是模仿网易云音乐的音乐闹钟界面,我们可以添加获取时间的方法来做成闹钟的应用。

以上为基本对话框,另外还有时间,日期选择功能的对话框和进度对话框,下面是用线程来模拟登录的例子,其中用到了对话框

 package com.example.a22345.life;import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;/*** Created by 22345 on 2016/7/25.*/
public class Activity13 extends Activity {ProgressDialog pd;
//进度框实例@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity13);//本篇为登录内容final EditText editText=(EditText)findViewById(R.id.passwordx);final AutoCompleteTextView autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.emailx);Button button=(Button)findViewById(R.id.sign_in);//以上3步为获取xml布局上的实例button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String email=editText.getText().toString();//获取输入的帐号内容,并转换为字符串String  pswd=autoCompleteTextView.getText().toString();//获取输入的密码内容,并转换为字符串if(email.equals("1")&&pswd.equals("1")){                        //判读是否可以通过Dialog();//上面是显示dialog//两者同时运行,但是线程不一样//下面是新建子线程new Thread(){public void run() {    //人为制造的for循环耗时操作效果(Sleep)for (int i = 0; i < 4; i++) {try {Thread.sleep(1000);    //强制停顿1s} catch (InterruptedException e) {e.printStackTrace();}}handler.sendEmptyMessage(0);    //子线程给主线程发送消息}}.start();//启动线程}else if(email.equals("")&&email.equals("")){Toast.makeText(Activity13.this,"宝宝没有发现你没有输入帐号或者密码!",Toast.LENGTH_SHORT).show();}else{Toast.makeText(Activity13.this,"帐号或者密码错误啦!",Toast.LENGTH_SHORT).show();}                   //否则就提出错误提醒}});//以上为设置button监听器}Handler handler=new Handler()         //存在于UI主线程里的handler{@Overridepublic void handleMessage(Message msg){pd.dismiss();            //控制主线程里的pd消失Intent intent=new Intent(Activity13.this,Activity14.class);startActivity(intent);    //新的活动被打开finish();                 //旧的活动结束}};public void Dialog(){pd=new ProgressDialog(this);pd.setIcon(R.mipmap.ic_launcher);   //图标pd.setTitle("正在登录");           //题目pd.setMessage("请稍后……");      //内容pd.setCancelable(true);      //可取消pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);    //圆形pd.show();       //显示}
}                          //设置dialog方法,用来显示对话框

分析:1.UI主线程正在运行,输入帐号密码后,通过gettext获取输入内容,用equal方法判断,并提供未输入或者输入错误的提示
2.当输入正确后,启动dialog进度框,并同时启动子线程,此时两个线程分别走不同的线路,子线程所执行的操作就是sleep()延时效果,
通过for循环延时4s,最后由handler发出命令,回传给handler里的方法,执行方法达到进度框消失,新活动启动,旧活动销毁的效果

进度框会在4s后消失,并打开新的活动

                           2016.7.25  19:38 Surine

AlertDialog的种类和使用方法相关推荐

  1. HTML5类选择器使用,CSS选择器种类及使用方法

    CSS选择器种类及使用方法 2018年04月17日 | 萬仟网IT编程 | 我要评论 css选择器 有通配符选择器书写格式:*+{声名块} 并集选择器/组合选择器 书写格式;元素或类或id+" ...

  2. 画笔和画刷的种类和使用方法

    画笔的使用和上一章的字体类似,首先用CreatePen()函数创建一个画笔对象,然后与设备文本绑定,同时得到旧的画笔.用完后删除新画笔,并且恢复旧画笔.画笔的种类有7种,参照下表及下面的例子. 值 说 ...

  3. 常见咳嗽种类、治疗方法和忌食大全

    常见咳嗽种类.治疗方法和忌食大全 一.风热咳嗽 症见发热,流涕,咳嗽,喉中痰鸣,咯吐黄痰,日重夜轻,小便黄赤,大便干燥,脉浮数,舌红苔厚腻,指纹红紫.治以疏风清肺,化痰止咳.方用鱼蛤石花汤:生石膏30 ...

  4. 计算机教室使用 灭火器,实验室灭火器的种类和使用方法

    <实验室灭火器的种类和使用方法>由会员分享,可在线阅读,更多相关<实验室灭火器的种类和使用方法(3页珍藏版)>请在人人文库网上搜索. 1.实验室灭火器的种类和使用方法灭火器的种 ...

  5. Css弦乐弱音器奏键位,小提琴弱音器的种类及使用方法

    弱音器是每个小提琴者在演奏时,需要的一项配件,小提琴弱音器的主要功用是调节音色改变与减弱琴声音量大小,利用弱音器本身的重量,牵制琴桥的震动方式与传导.今天学习啦小编为大家带来小提琴弱音器的种类及使用方 ...

  6. PHP气缸种类,气缸分类方法有哪些及气缸的种类

    气缸分类方法有哪些及气缸的种类 不少朋友对于活塞环间隙是多少这方面的信息颇感兴趣的.小编今天就为此整理了活塞环间隙是多少的相关讯息,希望对有需要的朋友有所帮助. 气缸分类方法有哪几种 目前一般的民用汽 ...

  7. Delphi 两种类的声明方法

    Delphi的类声明有两种方法,一种是继承了Delphi的内建类的声明,另一种则是完全自定义的类声明. 这两种类的区别不仅在于声明程序的不同,还会影响到对象实体的内存管理. 1 unit Unit1; ...

  8. 现代基准测试程序种类以及使用方法

    文章目录 基准测试程序种类 常见测试程序概述 常见测试程序使用 Dhrystone的使用 UnixBench的使用 CPU-Z的安装与使用 参考文献 现代计算机的性能测量极大地依赖于在其上运行的工作负 ...

  9. SQL注入攻击的种类和防范方法

    观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. 知 ...

最新文章

  1. Excel VBA 教程
  2. XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法
  3. php 如何生成二级目录json,使用PHP根据已解码的JSON创建文件夹/文件结构
  4. 通过rsync搭建一个远程备份系统(二)
  5. Excel+SQL数据库连接
  6. Java并发编程实践笔记(一)
  7. 小程序对wxParse 使用
  8. 用计算机代码怎么表白,IT男专用表白程序
  9. mac电脑如何装双系统Linux,苹果电脑双系统怎么装【详细教程分享】
  10. TWaver HTML5 高性能拓扑
  11. 【洛谷P3651】展翅翱翔之时
  12. 台湾最大IC封装厂近三成员工停工14天,安世半导体宣布今日起调涨价格!
  13. Root后安装Xposed框架卡Logo问题
  14. 水果店收银系统解决方案
  15. epel yum 安装 trickle
  16. Secure Code Warrlor学习记录(三)
  17. 【如何在自己的宿舍有一台幽灵主机?】关于如何合理配置外网透穿和进行System服务的编写、安装,同时添加局域网唤醒等的一次实践。
  18. Spring Cloud Gateway 不小心换了个 Web 容器就不能用了,我 TM 人傻了
  19. 计算机算法对程序设计的作用,【程序设计论文】高中算法与程序设计教学意义及有效性(共3796字)...
  20. 用.NET做DDNS动态域名解析和SSL证书申请

热门文章

  1. 在解析完Excel表格之后,将每一行数据入库操作时,加入进度条,提示进度展示
  2. 测试思维面试题最新整理,有它遇到hr不用慌了
  3. Hardware ---- 输入阻抗
  4. 使用爬虫xpath解析出现“<Element p at 0x3382300>”错误
  5. 9-信息熵与基尼系数
  6. python模块—codecs
  7. 2018android旗舰手机,七款2018年安卓旗舰手机剖析,绕过手机上的坑,做一个精明消费者...
  8. 美颜SDK磨皮功能算法以及代码分析
  9. Android中的枚举
  10. phpstudy启功apache失败,直接在端口设置更改