AlertDialog的种类和使用方法
<本文章仅作学习的笔记的目的,可能会有参考冲突与错误,请见谅。>
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的种类和使用方法相关推荐
- HTML5类选择器使用,CSS选择器种类及使用方法
CSS选择器种类及使用方法 2018年04月17日 | 萬仟网IT编程 | 我要评论 css选择器 有通配符选择器书写格式:*+{声名块} 并集选择器/组合选择器 书写格式;元素或类或id+" ...
- 画笔和画刷的种类和使用方法
画笔的使用和上一章的字体类似,首先用CreatePen()函数创建一个画笔对象,然后与设备文本绑定,同时得到旧的画笔.用完后删除新画笔,并且恢复旧画笔.画笔的种类有7种,参照下表及下面的例子. 值 说 ...
- 常见咳嗽种类、治疗方法和忌食大全
常见咳嗽种类.治疗方法和忌食大全 一.风热咳嗽 症见发热,流涕,咳嗽,喉中痰鸣,咯吐黄痰,日重夜轻,小便黄赤,大便干燥,脉浮数,舌红苔厚腻,指纹红紫.治以疏风清肺,化痰止咳.方用鱼蛤石花汤:生石膏30 ...
- 计算机教室使用 灭火器,实验室灭火器的种类和使用方法
<实验室灭火器的种类和使用方法>由会员分享,可在线阅读,更多相关<实验室灭火器的种类和使用方法(3页珍藏版)>请在人人文库网上搜索. 1.实验室灭火器的种类和使用方法灭火器的种 ...
- Css弦乐弱音器奏键位,小提琴弱音器的种类及使用方法
弱音器是每个小提琴者在演奏时,需要的一项配件,小提琴弱音器的主要功用是调节音色改变与减弱琴声音量大小,利用弱音器本身的重量,牵制琴桥的震动方式与传导.今天学习啦小编为大家带来小提琴弱音器的种类及使用方 ...
- PHP气缸种类,气缸分类方法有哪些及气缸的种类
气缸分类方法有哪些及气缸的种类 不少朋友对于活塞环间隙是多少这方面的信息颇感兴趣的.小编今天就为此整理了活塞环间隙是多少的相关讯息,希望对有需要的朋友有所帮助. 气缸分类方法有哪几种 目前一般的民用汽 ...
- Delphi 两种类的声明方法
Delphi的类声明有两种方法,一种是继承了Delphi的内建类的声明,另一种则是完全自定义的类声明. 这两种类的区别不仅在于声明程序的不同,还会影响到对象实体的内存管理. 1 unit Unit1; ...
- 现代基准测试程序种类以及使用方法
文章目录 基准测试程序种类 常见测试程序概述 常见测试程序使用 Dhrystone的使用 UnixBench的使用 CPU-Z的安装与使用 参考文献 现代计算机的性能测量极大地依赖于在其上运行的工作负 ...
- SQL注入攻击的种类和防范方法
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. 知 ...
最新文章
- Excel VBA 教程
- XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法
- php 如何生成二级目录json,使用PHP根据已解码的JSON创建文件夹/文件结构
- 通过rsync搭建一个远程备份系统(二)
- Excel+SQL数据库连接
- Java并发编程实践笔记(一)
- 小程序对wxParse 使用
- 用计算机代码怎么表白,IT男专用表白程序
- mac电脑如何装双系统Linux,苹果电脑双系统怎么装【详细教程分享】
- TWaver HTML5 高性能拓扑
- 【洛谷P3651】展翅翱翔之时
- 台湾最大IC封装厂近三成员工停工14天,安世半导体宣布今日起调涨价格!
- Root后安装Xposed框架卡Logo问题
- 水果店收银系统解决方案
- epel yum 安装 trickle
- Secure Code Warrlor学习记录(三)
- 【如何在自己的宿舍有一台幽灵主机?】关于如何合理配置外网透穿和进行System服务的编写、安装,同时添加局域网唤醒等的一次实践。
- Spring Cloud Gateway 不小心换了个 Web 容器就不能用了,我 TM 人傻了
- 计算机算法对程序设计的作用,【程序设计论文】高中算法与程序设计教学意义及有效性(共3796字)...
- 用.NET做DDNS动态域名解析和SSL证书申请
热门文章
- 在解析完Excel表格之后,将每一行数据入库操作时,加入进度条,提示进度展示
- 测试思维面试题最新整理,有它遇到hr不用慌了
- Hardware ---- 输入阻抗
- 使用爬虫xpath解析出现“<Element p at 0x3382300>”错误
- 9-信息熵与基尼系数
- python模块—codecs
- 2018android旗舰手机,七款2018年安卓旗舰手机剖析,绕过手机上的坑,做一个精明消费者...
- 美颜SDK磨皮功能算法以及代码分析
- Android中的枚举
- phpstudy启功apache失败,直接在端口设置更改