天天看點

android AlertDialog 彈出窗

AlertDialog的構造方法全部是Protected的,是以不能直接通過new一個AlertDialog來建立出一個AlertDialog。

要建立一個AlertDialog,就要用到AlertDialog.Builder中的create()方法。

使用AlertDialog.Builder建立對話框需要了解以下幾個方法:

setTitle :為對話框設定标題

setIcon :為對話框設定圖示

setMessage:為對話框設定内容

setView : 給對話框設定自定義樣式

setItems :設定對話框要顯示的一個list,一般用于顯示幾個指令時

setMultiChoiceItems :用來設定對話框顯示一系列的複選框

setNeutralButton    :普通按鈕

setPositiveButton   :給對話框添加"Yes"按鈕

setNegativeButton :對話框添加"No"按鈕

create : 建立對話框

show :顯示對話框

一、簡單的AlertDialog

下面,建立一個簡單的ALertDialog并顯示它:

[java]  package com.tianjf; 

import android.app.Activity; 

import android.app.AlertDialog; 

import android.app.Dialog; 

import android.os.Bundle; 

public class Dialog_AlertDialogDemoActivity extends Activity { 

    /** Called when the activity is first created. */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

        Dialog alertDialog = new AlertDialog.Builder(this). 

                setTitle("對話框的标題"). 

                setMessage("對話框的内容"). 

                setIcon(R.drawable.ic_launcher). 

                create(); 

        alertDialog.show(); 

    } 

package com.tianjf;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.Dialog;

import android.os.Bundle;

public class Dialog_AlertDialogDemoActivity extends Activity {

 /** Called when the activity is first created. */

 @Override

 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  setContentView(R.layout.main);

  Dialog alertDialog = new AlertDialog.Builder(this).

    setTitle("對話框的标題").

    setMessage("對話框的内容").

    setIcon(R.drawable.ic_launcher).

    create();

  alertDialog.show();

 }

}運作結果如下:

二、帶按鈕的AlertDialog

上面的例子很簡單,下面我們在這個AlertDialog上面加幾個Button,實作删除操作的提示對話框

[java] package com.tianjf; 

import android.content.DialogInterface; 

                setTitle("确定删除?"). 

                setMessage("您确定删除該條資訊嗎?"). 

                setPositiveButton("确定", new DialogInterface.OnClickListener() { 

                    @Override 

                    public void onClick(DialogInterface dialog, int which) { 

                        // TODO Auto-generated method stub  

                    } 

                }). 

                setNegativeButton("取消", new DialogInterface.OnClickListener() { 

                setNeutralButton("檢視詳情", new DialogInterface.OnClickListener() { 

import android.content.DialogInterface;

    setTitle("确定删除?").

    setMessage("您确定删除該條資訊嗎?").

    setPositiveButton("确定", new DialogInterface.OnClickListener() {

     @Override

     public void onClick(DialogInterface dialog, int which) {

      // TODO Auto-generated method stub

     }

    }).

    setNegativeButton("取消", new DialogInterface.OnClickListener() {

    setNeutralButton("檢視詳情", new DialogInterface.OnClickListener() {

}在這個例子中,我們定義了三個按鈕,分别是"Yes"按鈕,"No"按鈕以及一個普通按鈕,每個按鈕都有onClick事件,TODO的地方可以放點了按鈕之後想要做的一些處理

看一下運作結果:

可以看到三個按鈕添加到了AlertDialog上,三個沒有添加事件處理的按鈕,點了隻是關閉對話框,沒有任何其他操作。

三、類似ListView的AlertDialog

用setItems(CharSequence[] items, final OnClickListener listener)方法來實作類似ListView的AlertDialog

第一個參數是要顯示的資料的數組,第二個參數是點選某個item的觸發事件

import android.widget.Toast; 

        final String[] arrayFruit = new String[] { "蘋果", "橘子", "草莓", "香蕉" }; 

                setTitle("你喜歡吃哪種水果?"). 

                setIcon(R.drawable.ic_launcher) 

                .setItems(arrayFruit, new DialogInterface.OnClickListener() { 

                        Toast.makeText(Dialog_AlertDialogDemoActivity.this, arrayFruit[which], Toast.LENGTH_SHORT).show(); 

import android.widget.Toast;

  final String[] arrayFruit = new String[] { "蘋果", "橘子", "草莓", "香蕉" };

    setTitle("你喜歡吃哪種水果?").

    setIcon(R.drawable.ic_launcher)

    .setItems(arrayFruit, new DialogInterface.OnClickListener() {

      Toast.makeText(Dialog_AlertDialogDemoActivity.this, arrayFruit[which], Toast.LENGTH_SHORT).show();

四、類似RadioButton的AlertDialog

用setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)方法來實作類似RadioButton的AlertDialog

第一個參數是要顯示的資料的數組,第二個參數是初始值(初始被選中的item),第三個參數是點選某個item的觸發事件

在這個例子裡面我們設了一個selectedFruitIndex用來記住選中的item的index

    private int selectedFruitIndex = 0; 

                .setSingleChoiceItems(arrayFruit, 0, new DialogInterface.OnClickListener() { 

                        selectedFruitIndex = which; 

                setPositiveButton("确認", new DialogInterface.OnClickListener() { 

                        Toast.makeText(Dialog_AlertDialogDemoActivity.this, arrayFruit[selectedFruitIndex], Toast.LENGTH_SHORT).show(); 

 private int selectedFruitIndex = 0;

    .setSingleChoiceItems(arrayFruit, 0, new DialogInterface.OnClickListener() {

      selectedFruitIndex = which;

    setPositiveButton("确認", new DialogInterface.OnClickListener() {

      Toast.makeText(Dialog_AlertDialogDemoActivity.this, arrayFruit[selectedFruitIndex], Toast.LENGTH_SHORT).show();

}

運作結果如下:

五、類似CheckBox的AlertDialog

用setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener)方法來實作類似CheckBox的AlertDialog

第一個參數是要顯示的資料的數組,第二個參數是選中狀态的數組,第三個參數是點選某個item的觸發事件

        final boolean[] arrayFruitSelected = new boolean[] {true, true, false, false}; 

                .setMultiChoiceItems(arrayFruit, arrayFruitSelected, new DialogInterface.OnMultiChoiceClickListener() { 

                    public void onClick(DialogInterface dialog, int which, boolean isChecked) { 

                        arrayFruitSelected[which] = isChecked; 

                        StringBuilder stringBuilder = new StringBuilder(); 

                        for (int i = 0; i < arrayFruitSelected.length; i++) { 

                            if (arrayFruitSelected[i] == true) 

                            { 

                                stringBuilder.append(arrayFruit[i] + "、"); 

                            } 

                        } 

                        Toast.makeText(Dialog_AlertDialogDemoActivity.this, stringBuilder.toString(), Toast.LENGTH_SHORT).show(); 

  final boolean[] arrayFruitSelected = new boolean[] {true, true, false, false};

    .setMultiChoiceItems(arrayFruit, arrayFruitSelected, new DialogInterface.OnMultiChoiceClickListener() {

     public void onClick(DialogInterface dialog, int which, boolean isChecked) {

      arrayFruitSelected[which] = isChecked;

      StringBuilder stringBuilder = new StringBuilder();

      for (int i = 0; i < arrayFruitSelected.length; i++) {

       if (arrayFruitSelected[i] == true)

       {

        stringBuilder.append(arrayFruit[i] + "、");

       }

      }

      Toast.makeText(Dialog_AlertDialogDemoActivity.this, stringBuilder.toString(), Toast.LENGTH_SHORT).show();

六、自定義View的AlertDialog

有時候我們不能滿足系統自帶的AlertDialog風格,就比如說我們要實作一個Login畫面,有使用者名和密碼,這時我們就要用到自定義View的AlertDialog

先建立Login畫面的布局檔案

[html] <?xml version="1.0" encoding="utf-8"?> 

    android:layout_width="fill_parent" 

    android:layout_height="fill_parent" 

    android:orientation="vertical" > 

    <LinearLayout 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        android:gravity="center" > 

        <TextView 

            android:layout_width="0dip" 

            android:layout_height="wrap_content" 

            android:layout_weight="1" 

            android:text="@string/user" /> 

        <EditText 

            android:layout_weight="1" /> 

    </LinearLayout> 

            android:text="@string/passward" /> 

</LinearLayout> 

<?xml version="1.0" encoding="utf-8"?>

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:gravity="center" >

        <TextView

            android:layout_width="0dip"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="@string/user" />

        <EditText

            android:layout_weight="1" />

    </LinearLayout>

            android:text="@string/passward" />

</LinearLayout>

然後在Activity裡面把Login畫面的布局檔案添加到AlertDialog上

import android.view.LayoutInflater; 

import android.view.View; 

        // 取得自定義View  

        LayoutInflater layoutInflater = LayoutInflater.from(this); 

        View myLoginView = layoutInflater.inflate(R.layout.login, null); 

                setTitle("使用者登入"). 

                setView(myLoginView). 

                setPositiveButton("登入", new DialogInterface.OnClickListener() { 

import android.view.LayoutInflater;

import android.view.View;

  // 取得自定義View

  LayoutInflater layoutInflater = LayoutInflater.from(this);

  View myLoginView = layoutInflater.inflate(R.layout.login, null);

    setTitle("使用者登入").

    setView(myLoginView).

    setPositiveButton("登入", new DialogInterface.OnClickListener() {

繼續閱讀