Android UI系列--对话框(一)(AlertDialog,TimePickerDialog,DatePickerDialog,ProgressDialog)
一.Dialog介绍
dialog就是一个在屏幕上弹出一个可以让用户做出一个选择,或者输入额外的信息的对话框,一个对话框并不会沾满我们整个的屏幕,并且通常用于模型事件当中需要用户做出一个决定后才会继续执行。
Dialog类是dialog对话框的基类,但是我们应该避免直接使用这个类来实例化一个dialog对话框,我们应当使用其子类来得到一个对话框.
Dialog有很多的子类实现,所以我们要定义一个对话框,使用其子类来实例化一个即可,而不要直接使用Dialog这个父类来构造
java.lang.Object
↳ android.app.Dialog Known Direct Subclasses(直接子类)
AlertDialog, CharacterPickerDialog, MediaRouteChooserDialog, MediaRouteControllerDialog, Presentation Known Indirect Subclasses(间接子类)
DatePickerDialog, ProgressDialog, TimePickerDialog
二.AlertDialog
AlertDialog是Dialog的一个直接子类, 我们通常用 AlertDialog.Builder 直接实例化一个对话框对象。
AlertDialog主要包括警告框,单选框,多选框,下拉列表弹出框,自定义弹出框(自己创建一个弹出界面)
界面设计xml文件(main_activity.xml)如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical"> <Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="创建对话框"
android:onClick="click1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="创建单选框"
android:onClick="click2" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="创建多选框"
android:onClick="click3"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="创建下拉框/和message不同"
android:onClick="click4"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取用户名和密码"
android:onClick="click5"
/> </LinearLayout>
自定义xml界面(dialog.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="vertical" > <EditText
android:id="@+id/username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名"
/>
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
/> </LinearLayout>
Java文件代码如下:
package com.wyy.dialog; import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.text.style.BulletSpan;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void click1(View v){ AlertDialog.Builder builder=new Builder(this);
builder.setIcon(TRIM_MEMORY_BACKGROUND);
builder.setTitle("请选择:");
builder.setMessage("工作 重要还是生活重要?"); builder.setPositiveButton("工作", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub Toast.makeText(MainActivity.this, "工作不是为了更好的生活吗?", 0).show(); }
} ); builder.setNegativeButton("生活", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "工作可能让你更有存在感", 0).show(); }
} ); builder.setNeutralButton("忽略", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub Toast.makeText(MainActivity.this, "neutral"+which, 0).show(); }
}); AlertDialog ad=builder.create();
ad.show(); } public void click2(View v){
AlertDialog.Builder builder=new Builder(this);
builder.setTitle("请选择您的性别");
final String[] items=new String[]{"男","女","其他"};
builder.setSingleChoiceItems(items, -1,new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this,"您选择了"+items[which], 0).show();
dialog.dismiss(); } } );
builder.show(); } public void click3(View v){
AlertDialog.Builder builder=new Builder(this);
builder.setTitle("谁是最帅的明星");
/**
* 第一个参数指定我们要显示的一组下拉多选框的数据集合
* 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
* 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
* 第三个参数给每一个多选项绑定一个监听器
*/
                final String[] items=new String[]{"胡歌","霍建华","李易峰","杨洋"}; 
                final boolean[] checkedItems=new boolean[]{true,false,true,false};
		builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which, boolean isChecked) {
				// TODO Auto-generated method stub
				checkedItems[which]=isChecked;
							}
		});
		builder.setPositiveButton("确定", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				String text="";
				for(int i=0;i<4;i++){
					text+=checkedItems[i]?items[i]+",":"";
				}
				Toast.makeText(MainActivity.this, text, 0).show();
				dialog.dismiss();
			}
		});
		builder.setNegativeButton("取消", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
			}
		});
		builder.show();
	}
	public void click4(View v){
		AlertDialog.Builder builder=new Builder(this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("请选择你喜欢的城市");
		final String[]  items=new String[]{"北京","上海","南京","深圳","南阳"};
		builder.setSingleChoiceItems(items,  -1, new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "您选择的城市是:"+items[which], 0).show();
			}
		});
		builder.show();
	}
	public void click5(View v){
		AlertDialog.Builder  builder=new Builder(this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("请输入用户名和密码");
		
		View view=LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog, null);
		builder.setView(view);
		final EditText username=(EditText) findViewById(R.id.username);
		final EditText password=(EditText) findViewById(R.id.password);
		builder.setPositiveButton("确定", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				String a=username.getText().toString().trim();
				String b=password.getText().toString().trim();
				Toast.makeText(MainActivity.this, "用户名:"+a+",密码:"+b, 0).show();
			}
		});
		builder.setNegativeButton("取消", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
			}
		});
		builder.show();
	}
	}
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)的更多相关文章
- Android UI系列-----时间、日期、Toasts和进度条Dialog
		
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
 - 【转】Android UI系列-----时间、日期、Toasts和进度条Dialog
		
原文网址:http://www.cnblogs.com/xiaoluo501395377/p/3421727.html 您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注 ...
 - Android UI系列-----Dialog对话框
		
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
 - android中常见对话框之一AlertDialog
		
在Android应用中,有多种对话框:Dialog.AlertDialog.ProgressDialog.时间.日期等对话框. (1)Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽 ...
 - Android中弹出对话框,AlertDialog关键代码
		
写在这里便于以后查看. Android中弹出对话框的关键代码: btn01.setOnClickListener(new OnClickListener() { @Override public vo ...
 - 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 ...
 - ANDROID 系统提示对话框(ALERTDIALOG)的使用
		
new AlertDialog.Builder(baseActivity).setTitle("删除确认")//设置对话框标题 .setMessage("您确定要删除选中 ...
 - Android UI系列-----ScrollView和HorizontalScrollView
		
本篇随笔将讲解一下Android当中比较常用的两个布局容器--ScrollView和HorizontalScrollView,从字面意义上来看也是非常的简单的,ScrollView就是一个可以滚动的V ...
 - Android UI系列-----EditText和AutoCompleteTextView
		
在这篇随笔里将主要讲解一下EditText和AutoCompleteTextView这个控件 1.EditText 首先我们先简单来说说EditText这个控件,这个就相当于我们平常web开发中的文本 ...
 
随机推荐
- 运维之Linux基础知识(三)
			
运维之Linux基础知识(三) 1. 查看文本 cat tac more less head tail 1.1 cat 连接并显示文件 cat -n:在显示的时候,将每一行编号 -E:显示结束符$ - ...
 - 基于laravel5.4 vue 和vue-element搭建的单页面后台CMS
			
介绍 该项目后台是基于vue和laravel搭建的单页面CMS系统,包含了文章管理,权限管理,用户管理等基本模块. 前台使用了传统web技术,laravel渲染搭建了个博客系统 github地址:ht ...
 - spring boot / cloud (五) 自签SSL证书以及HTTPS
			
spring boot / cloud (五) 自签SSL证书以及HTTPS 前言 什么是HTTPS? HTTPS(全称:Hyper Text Transfer Protocol over Secur ...
 - Windows界面设计标准
			
Windows界面设计标准..- Windows界面设计标准 Windows 界面设计标准 1. 易用性 界面元素的名称.标签应该易懂,用词准确,避免使用模楞两可的字眼,要与同一界面上的其他元素易于区 ...
 - WireX:Android智能手机组成的DDoS僵尸网络
			
阿里聚安全小编曾多次报道了官方应用市场出现恶意软件的事件,让大家在下载APP的时候三思而后行. 最近多家安全公司组成的安全研究小组发现了一个新的.传播广泛的僵尸网络,它是由成千上万的Android智能 ...
 - 推广技巧:新站要如何推广引流做到日IP10000?
			
一.回复高人气帖子插楼推广 1.找高人气的帖子在二楼或者二楼楼层中直接插入链接推广.虽然这种方法存活率比较低,但也算是贴吧里面最直接的有效的方法.一般我们分为三种: 1.1图中链接是一个短网址,这个是 ...
 - 002-Apache Maven 构建生命周期
			
Maven - 构建生命周期 什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序.这里的阶段是生命周期的一部分. 举例说明,一个典 ...
 - 现在开始学习WPF了,mongodb在整理一下
			
回忆一下自己学习mongodb的过程 1安装 2增删改查 3数据类型转换 4GridFS 5权限管理--开启权限之前先建立一个超级用户(admin库中),开启权限,用该用户登陆,进入admin数据库( ...
 - Appium环境搭建(python)
			
appium是一个开源的,适用于原生或者移动网络和混合应用程序在 iOS 和 Android 平台上的的开源自动化测试框架.在这里,详细的介绍Appium的环境搭建步骤. 1.安装Node.js在ht ...
 - tp下的memcached运用
			
来源:http://blog.csdn.net/fudaoji/article/details/50722839 侵删 一.环境: lnmp开发服务器, memcached2.2.0,thinkp ...