android.app.AlertDialog及其子类提供了4种常用的对话框:
AlertDialog:功能最丰富,实际应用最广的对话框,最常用的。
ProgressDialog:进度对话框,这个对话框只是对简单进度条的封装
DatePickerDialog:日期选择对话框,这个对话框只是对DatePicker的包装
TimePickerDialog:时间选择对话框,这个对话框只是对TimePicker的包装
——AlertDialog
功能很强大,可以生成各种内容的对话框
AlertDialog生成对话框可分为如下4个区域:
——图标区
——标题区
——内容区
——按钮区
AlterDialog使用步骤:
(1)创建AlertDialog.Builder对象
(2)调用AlertDialog.Builder的setTitle()或setCustomTitle()方法设置标题
(3)调用AlertDialog.Builder的setIcon()方法设置图标
(4)调用AlertDialog.Builder相关方法设置显示内容,
包括:setMessage 设置最简单的文本提示信息
setItems 设置内容为简单列表项,调用该方法时需要传入一个数组或者数组资源的资源ID
setSingleChoiceItems 设置内容为单选的列表项,可以传入数组,资源id,Cursor,ListAdapter作为参数
setMultiChoiceItems 设置内容为多选的列表项
setAdapter 设置内容为自定义列表项
setView 设置内容为任意类型的View,完成一个登录对话框的界面
(5)调用AlertDialog.Builder的setPositiveButton(),setNegativeButton
或setNeutralButton()方法添加多个按钮
(6)调用AlertDialog.Builder的create()方法创建AlterDialog对象
(7)调用AlertDialog的show()方法显示对话框
setCancelable(false):设置是否可以取消对话框,默认为true,点击按钮,回退健或者点击
任何一个地方都会关闭对话框。需要在create之前调用。
AlertDialog.dismiss():取消对话框
AlertDialog.cancel():取消对话框
修改Activity的背景颜色:
getWindow().setBackgroundDrawableResource(int);
修改Activity的背景图片:
getWindow().setBackgroundDrawable(Drawable);
——DatePickerDialog,TimePickerDialog
这两个对话框功能简单,用法也很简单。只需要两步就可以了:
1)通过new关键字创建实例,调用show()将对话框显示出来
2)绑定监听器,从而通过监听器获取用户设置的事件
——ProgressDialog
使用ProgressDialog进度条对话框有两种方式:
1)如果只是创建一个简单的进度对话框,
调用ProgressDialog提供的静态show()方法显示对话框即可
这里的参数boolean indeterminate设置是否是不明确的状态。
2)创建ProgressDialog,然后调用方法对对话框中的进度条进行设置,
设置完成后将对话框显示出来即可。
ProgressDialog包含如下的方法:
a)setTitle(“提示信息”);
b)setMessage(charSequence)设置对话框里显示的消息
c)setMax(int)设置对话框中进度条的最大值
d)setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)设置对话框里进度条的风格
e)setIndeterminate(boolean)设置进度条是否显示不明确值,不明确就是滚动条的当前值自动在最小到最大值之间来回移动,形成这样一个动画效果,这个只是告诉别人“我正在工作”,但不能提示工作进度到哪个阶段。主要是在进行一些无法确定操作时间的任务时作为提示。而“明确”就是根据你的进度可以设置现在的进度值
f)p.dismiss()关闭对话框
package com.xspacing.alertdialog;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;
/**
* @ClassName MainActivity.java
* @Description TODO 对话框
* @author Smile
* @version v1.0
* @date 2016年9月27日
*/
public class MainActivity extends Activity implements View.OnClickListener {
private Button mBtnAlertDialog;
private Button mOneBtnAlertDialog;
private Button mCustomAlertDialog;
private Button mDateAlertDialog;
private Button mTimeAlertDialog;
private Button mMultiAlertDialog;
private Button mProgressAlertDialog;
private Map<String, String> map;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
initDatas();
}
private void initViews() {
mBtnAlertDialog = (Button) findViewById(R.id.bt_alertdialog);
mOneBtnAlertDialog = (Button) findViewById(R.id.bt_one_alertdialog);
mMultiAlertDialog = (Button) findViewById(R.id.bt_multi_alertdialog);
mCustomAlertDialog = (Button) findViewById(R.id.bt_custom_alertdialog);
mDateAlertDialog = (Button) findViewById(R.id.bt_date_alertdialog);
mTimeAlertDialog = (Button) findViewById(R.id.bt_time_alertdialog);
mProgressAlertDialog = (Button) findViewById(R.id.bt_progress_alertdialog);
}
private void initDatas() {
mBtnAlertDialog.setOnClickListener(this);
mOneBtnAlertDialog.setOnClickListener(this);
mMultiAlertDialog.setOnClickListener(this);
mCustomAlertDialog.setOnClickListener(this);
mDateAlertDialog.setOnClickListener(this);
mTimeAlertDialog.setOnClickListener(this);
mProgressAlertDialog.setOnClickListener(this);
}
/**
* 普通对话框
*/
private void alertDialog() {
// context必须为activity的上下文,不可为getApplicationContext()
AlertDialog.Builder builder = new Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setCancelable(false); // 点击对话框意外区域,包括返回按钮,对话框都不会退出
builder.setTitle("标题");
builder.setMessage("是否退出");
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0);
}
});
builder.create().show();
}
/**
* 单选对话框
*/
private void oneAlertDialog() {
AlertDialog.Builder builder = new Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("请选择性别");
final String[] str = new String[] { "男", "女" };
builder.setSingleChoiceItems(str, 1, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Toast.makeText(getApplicationContext(), str[which], 0).show();
}
});
builder.create().show();
}
/**
* 多选对话框
*/
private void multiAlertDialog() {
AlertDialog.Builder builder = new Builder(this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("请选择喜欢的水果");
map = new HashMap<String, String>();
final String[] items = { "香蕉", "苹果", "雪梨", "火龙果", "水蜜桃" };
boolean[] checkedItems = { true, false, false, false, false };
//将为true的水果放进map中
for (int i = 0; i < checkedItems.length; i++) {
if (checkedItems[i]) {
map.put(items[i], items[i]);
}
}
builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
if (isChecked) {
map.put(items[which], items[which]);
Toast.makeText(getApplicationContext(), "你选择了" + items[which], 0).show();
} else {
map.remove(items[which]);
Toast.makeText(getApplicationContext(), "你取消了" + items[which], 0).show();
}
}
});
builder.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Set<String> keySet = map.keySet();
String string = "";
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
string += map.get(iterator.next());
}
Toast.makeText(getApplicationContext(), "你选择了" + string, 0).show();
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(getApplicationContext(), "你取消了选择对话框", 0).show();
}
});
builder.show();
}
/**
* 自定义对话框
*/
private void customAlertDialog() {
AlertDialog.Builder builder = new Builder(this);
View view = getLayoutInflater().inflate(R.layout.custom_dialog_view, null, false);
builder.setView(view);
Button btnAffirm = (Button) view.findViewById(R.id.bt_affirm);
Button btnCancel = (Button) view.findViewById(R.id.bt_cancel);
btnAffirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "确认", 0).show();
}
});
btnCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "取消", 0).show();
}
});
builder.create().show();
}
/**
* 日期选择器
*/
private void dateAlertDialog() {
// 当前日期
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int monthOfYear = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(this, new OnDateSetListener() {
// monthOfYear月份要加多一个1
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Toast.makeText(getApplicationContext(), year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日", 0)
.show();
}
}, year, monthOfYear, dayOfMonth);
dialog.show();
}
/**
* 时间选择器
*/
private void timeAlertDialog() {
// 当前时间
Calendar calendar = Calendar.getInstance();
int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
boolean is24HourView = true;
TimePickerDialog dialog = new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(final TimePicker view, final int hourOfDay, final int minute) {
Toast.makeText(getApplicationContext(), hourOfDay + "时" + minute + "分", 0).show();
}
}, hourOfDay, minute, is24HourView);
dialog.show();
}
/**
* 加载对话框
*/
private void progressAlertDialog() {
ProgressDialog dialog = new ProgressDialog(this);
// dialog.setTitle("正在拼命加载");
// dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //设置进度样式
// 水平进度条
dialog.setTitle("正在拼命下载");
// true:进度条不显示当前进度
dialog.setIndeterminate(true);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 设置进度样式
dialog.setMax(100);
// dialog.setProgress(50); //当前进度
dialog.setMessage("当前的下载进度:50%");
dialog.show();
}
/**
* 返回按钮监听
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
alertDialog();
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_alertdialog:
alertDialog();
break;
case R.id.bt_one_alertdialog:
oneAlertDialog();
break;
case R.id.bt_multi_alertdialog:
multiAlertDialog();
break;
case R.id.bt_custom_alertdialog:
customAlertDialog();
break;
case R.id.bt_date_alertdialog:
dateAlertDialog();
break;
case R.id.bt_time_alertdialog:
timeAlertDialog();
break;
case R.id.bt_progress_alertdialog:
progressAlertDialog();
break;
default:
break;
}
}
}
custom_dialog_view.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" >
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="#44ff0000"
android:gravity="center"
android:text="设置密码"
android:textColor="#ffffff" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入用户名" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入密码" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/bt_affirm"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定" />
<Button
android:id="@+id/bt_cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="取消" />
</LinearLayout>
</LinearLayout>
activity_main.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:orientation="vertical"
tools:context="com.xspacing.alertdialog.MainActivity" >
<Button
android:id="@+id/bt_alertdialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="普通对话框" />
<Button
android:id="@+id/bt_one_alertdialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="单选对话框" />
<Button
android:id="@+id/bt_multi_alertdialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="多选对话框" />
<Button
android:id="@+id/bt_custom_alertdialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="自定义对话框" />
<Button
android:id="@+id/bt_date_alertdialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="日期选择对话框" />
<Button
android:id="@+id/bt_time_alertdialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="时间选择对话框" />
<Button
android:id="@+id/bt_progress_alertdialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="加载对话框" />
</LinearLayout>