AlertDialog.Builder()的应用及扩展

来源:互联网 发布:淘宝考研资料靠谱店铺 编辑:程序博客网 时间:2024/06/10 05:24

   我们先来了解一下什么是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);      }  

0 0
原创粉丝点击