AlertDialog.Builder()的应用及扩展

本文详细介绍了Android中的AlertDialog及其使用方法。从AlertDialog的基本概念出发,探讨了如何创建及自定义对话框,并展示了如何通过代码实现对话框的显示与取消等功能。

   我们先来了解一下什么是AlertDialog?什么是AlertDialog.Builder?且两者有什么区别? 


   AlertDialog是Dialog的一个直接子类,AlertDialog也是Android系统当中最常用的对话框之一。 
   一个AlertDialog可以有两个以上的Button,可以对一个AlertDialog设置相应的信息。比如title,massage,setSingleChoiceItems,setPositiveButton,setNegativeButton等等。。。。 

   但不能直接通过AlertDialog的构造函数来生产一个AlertDialog。研究AlertDialog的源码发现AlertDialog所有的构造方法都是写保护的所以不能通过:AlertDialog alertDialog  = new AlertDialog();来得到。AlertDialog构造方法源码如下: 
Java代码  
<span style="font-size:18px;">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());  
} </span><strong> 
</strong>
只能通过:
Java代码  
  1. AlertDialog.Builder alertDialog  =new  AlertDialog.Builder(this);  
来得到。 
那就通过一个具体的实例来说说吧(这里用一个最常用的对话框为例): 
Java代码 
<span style="font-size:14px;">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 alertDialog = new AlertDialog.Builder(this);  
        alertDialog  
                .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) {    
                            }  
                        }).[b]setCancelable(false).[/b]create().show();  
    }  
}  </span>
针对AlertDialog中设置了确定和取消按钮,一般来说确定为执行某个动作,取消就是不执行,但是如果用户点击了系统的Back键,此时就会将AlertDialog关闭,而并没有执行预期的取消的操作。 

此时需要关注一个方法setCancelable(false) 该方法定义设置该AlertDialog是否可以被Back键取消,如果不设置默认为true 
下面是一些扩展: 
根据AlertDialog.Builder 创建 相应的 AlertDialog 
Java代码  
  1. AlertDialog alertDialogs = alertDialog.create();  


用dismiss();方法来清除创建过的AlertDialog 

Java代码  
  1. alertDialogs.dismiss();     

以上所采用的都是AlertDialog 系统默认的布局 现在说自定义布局的情况 并添加一个用于取消AlertDialog 的 Button 

定义其布局 main.xml 
Xml代码  
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="horizontal"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:padding="10dp"  
    >  
<LinearLayout   
    android:orientation="vertical"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    >  
 </LinearLayout>  
</LinearLayout>  </span>
通过LayoutInflater 得到上面 main.xml 布局文件 
Java代码  
  1. view = this.getLayoutInflater().inflate(R.layout.main, null);  
指定AlertDialog.Builder 所需的布局 并返回目标AlertDialog 
Java代码  
  1. alertDialog.setView(view);  
  2.   
  3. alertDialogs= alertDialog.create();  
通过 view.findViewById() 得到 目标View 然后设置其内容 如:
Java代码  
  1. TextView title = (TextView) view.findViewById(R.id.title);  
  2. title.setTextSize(20);  
  3. title.setTextColor(Color.RED);  
  4. title.setText("Title");  
  5.           
  6. TextView message = (TextView) view.findViewById(R.id.message);  
  7. message.setText("message");  

显示对话框 AlertDialog 
Java代码  
  1. findViewById(R.id.button).setOnClickListener(new OnClickListener(){  
  2.             public void onClick(View v) {  
  3.                 // TODO Auto-generated method stub  
  4.                 alertDialogs.show();  
  5.             }  
  6.         });  

清除对话框 AlertDialog 
Java代码  
<span style="background-color: rgb(255, 255, 255);"><span style="font-size:14px;">view.setOnClickListener(new OnClickListener(){  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                alertDialogs.dismiss();  
            }  
        });</span><strong>  </strong></span>
两种弹出对话框的方法:
<span style="font-size:14px;"><span style="white-space:pre">	</span>/** 
         * 第一种弹出对话框的方法,直接在程序中弹出对话框 
         */            
        builder =new AlertDialog.Builder(this);         //显示信息  
        builder.setMessage("直接弹出")  
        //确定按钮  
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {                
            public void onClick(DialogInterface dialog, int which) {  
            // TODO Auto-generated method stub  
                tv.setBackgroundColor(Color.CYAN);  
            }  
        })  
        //取消按钮  
        .setNegativeButton("No", new DialogInterface.OnClickListener() {                
            public void onClick(DialogInterface dialog, int which) {  
                // TODO Auto-generated method stub  
                setTitle("选择取消");                    
            }  
        });  
        AlertDialog ad00=builder.create();  
        ad00.show();  </span>
<span style="font-size:14px;"></span><pre name="code" class="java">/** 
  *第二种弹出对话框的方法,调用系统的onCreateDialog方法 
  **/  
 showDialog(1);  

@Override  
    protected Dialog onCreateDialog(int id) {  
  
        // TODO Auto-generated method stub  
        if(id==1){  
        new AlertDialog.Builder(this)  
            .setTitle("第二种")  
            .setMessage("调用系统的onCreateDialog(id)方法")  
            .setPositiveButton("确定", new DialogInterface.OnClickListener() {  
                public void onClick(DialogInterface dialog, int which) {  
                    tv.setBackgroundColor(Color.CYAN);  
                }  
            })  
            .setNegativeButton("取消", null).show();  
        }  
        return super.onCreateDialog(id);  
    }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值