【
那我们先了解什么是AlertDialog?什么是AlertDialog.Builder?且两者有什么区别?
AlertDialog是Dialog的一个直接子类,AlertDialog也是Android系统当中最常用的对话框之一。
一个AlertDialog可以有两个以上的Button,可以对一个AlertDialog设置相应的信息。比如title,massage,setSingleChoiceItems,setPositiveButton,setNegativeButton等等。。。。
但不能直接通过AlertDialog的构造函数来生产一个AlertDialog。研究AlertDialog的源码发现AlertDialog所有的构造方法都是写保护的所以不能通过:AlertDialog alertDialog = new AlertDialog();来得到。AlertDialog构造方法源码如下:
- protected AlertDialog(Context context) {
- this(context, com.android.internal.R.style.Theme_Dialog_Alert);
- }
- protected AlertDialog(Context context, int theme) {
- super(context, theme);
- mAlert = new AlertController(context, this, getWindow());
- }
- protected AlertDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
- super(context, com.android.internal.R.style.Theme_Dialog_Alert);
- setCancelable(cancelable);
- setOnCancelListener(cancelListener);
- mAlert = new AlertController(context, this, getWindow());
- }
只能通过:
- AlertDialog.Builder builder =new AlertDialog.Builder(this);
来得到。
那就通过一个具体的实例来说说吧(这里用一个最常用的对话框为例):
- package com.oyah;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.content.DialogInterface;
- import android.os.Bundle;
- public class TestsActivity extends Activity {
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder
- .setTitle("title")
- .setMessage("message")
- .setPositiveButton("okBuuon",
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- }
- })
- .setNegativeButton("exitButton",
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- }
- }).setCancelable(false).create().show();
- }
- }
针对AlertDialog中设置了确定和取消按钮,一般来说确定为执行某个动作,取消就是不执行,但是如果用户点击了系统的Back键,此时就会将AlertDialog关闭,而并没有执行预期的取消的操作。
此时需要关注一个方法setCancelable(false) 该方法定义设置该AlertDialog是否可以被Back键取消,如果不设置默认为true
下面是一些扩展:
根据AlertDialog.Builder 创建 相应的 AlertDialog
- AlertDialog alertDialogs = builder.create();
以上一个大括号内容均出自:http://blog.youkuaiyun.com/xuyide54321/article/details/7029146