AlertDialog和AlertDialog.Builder?两者区别

 那我们先了解什么是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 alertDialog  =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 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();   
    }   
}  


针对AlertDialog中设置了确定和取消按钮,一般来说确定为执行某个动作,取消就是不执行,但是如果用户点击了系统的Back键,此时就会将AlertDialog关闭,而并没有执行预期的取消的操作。

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

AlertDialog alertDialogs = alertDialog.create();  


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

alertDialogs.dismiss();  


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

定义其布局 main.xml

<?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>


通过LayoutInflater 得到上面 main.xml 布局文件

view = this.getLayoutInflater().inflate(R.layout.main, null);


指定AlertDialog.Builder 所需的布局 并返回目标AlertDialog

alertDialog.setView(view);

alertDialogs= alertDialog.create();


通过 view.findViewById() 得到 目标View 然后设置其内容 如:

TextView title = (TextView) view.findViewById(R.id.title);
title.setTextSize(20);
title.setTextColor(Color.RED);
title.setText("Title");
        
TextView message = (TextView) view.findViewById(R.id.message);
message.setText("message");


显示对话框 AlertDialog

findViewById(R.id.button).setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				// TODO Auto-generated method stub
				alertDialogs.show();
			}
        });


清除对话框 AlertDialog

view.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				// TODO Auto-generated method stub
				alertDialogs.dismiss();
			}
        });



 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值