android AlertDialog 詳解

1 效果圖

先看效果圖:


2 概述

AlertDialog生成的對話框可分爲4個區域:圖標區,標題區,內容區,按鈕區

結構如圖:

AlertDialog的構造方法全部是Protected的,所以不能直接通過new一個AlertDialog來創建出一個AlertDialog。要創建一個AlertDialog,就要用到AlertDialog.Builder中的create()方法。

AlertDialog對話框的使用步驟:

1,創建AlertDialog.Builder對象

2,調用Builder對象的setTitle()設置標題,setIcon設置圖標

3,調用Builder對象的相關方法設置內容,AlertDialog提供如下設置指定對話框的內容:

setMessage();設置簡單文本框的內容

setItems();設置簡單列表的內容,數組

setSingleChoiceItems();;設置單選列表的內容,內容參數可以是數組Cursor,ListAdapter

setMultiChoiceItems();設置多選列表項的內容,內容參數可以是數組,Cursor

setAdapter();設置內容,內容是ListAdapter,常用的BaseAdapter,SimpleAdapter,ArrayAdapter

setView();設置內容,參數是自定義的View

setItems :設置對話框要顯示的一個list,一般用於顯示幾個命令時 

4,調用Builder對象的setPositiveButton()和 setNegativeButton()設置按鈕和監聽器

5,調用Builder對象的create()方法創建AlertDialog對象,再調用AlertDialog對象的show()方法顯示對話框

總之:調用Builder對象設置圖標,標題,內容,按鈕,在create(),show()

2 概述

3 例子代碼

java代碼

package mm.shandong.com.testalertdialog;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Toast;

import java.lang.reflect.Field;
import java.util.ArrayList;

public class TestAlertDialogActivity extends AppCompatActivity {
    String nav_name = "AlertDialog";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_alert_dialog);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setTitle(nav_name + " demo");
    }

    ///顯示普通對話框
    public void showNomalDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("普通對話框");
        builder.setIcon(R.drawable.head1);
        builder.setMessage("對話框文本內容");
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(TestAlertDialogActivity.this,
                        "您點擊的是確定按鈕",
                        Toast.LENGTH_SHORT).show();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(TestAlertDialogActivity.this,
                        "您點擊的是取消按鈕",
                        Toast.LENGTH_SHORT).show();
            }
        });
        builder.create().show();
    }

    ////顯示列表對話框
    public void showListDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("列表對話框");
        builder.setIcon(R.drawable.head2);
        final String[] arrayRegion = getResources().
                getStringArray(R.array.arrayRegion);
        builder.setItems(arrayRegion, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int position) {

                Toast.makeText(TestAlertDialogActivity.this,
                        arrayRegion[position], Toast.LENGTH_SHORT).show();
            }
        });

        builder.create().show();
    }

    ///顯示有單選按鈕的對話框
    public void showSingleListDialog(View view) {
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("單選列表對話框");
        builder.setIcon(R.drawable.head2);
        final String[] arrayRegion = getResources().getStringArray(R.array.arrayRegion);
        builder.setSingleChoiceItems(arrayRegion,1,
          new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int position) {
                Toast.makeText(TestAlertDialogActivity.this,
                        arrayRegion[position], Toast.LENGTH_SHORT).show();
            }
        });
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                AlertDialog alertDialog = (AlertDialog) dialogInterface;
                int sp = alertDialog.getListView().getCheckedItemPosition();
                String str = (String) alertDialog.getListView().getItemAtPosition(sp);

                Toast.makeText(TestAlertDialogActivity.this,
                        str, Toast.LENGTH_SHORT).show();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(TestAlertDialogActivity.this,
                        "您點擊的是取消按鈕", Toast.LENGTH_SHORT).show();
            }
        });
        builder.create().show();
    }

    ///顯示有多選按鈕的對話框
    public void showMultiListDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("多選列表對話框");
        builder.setIcon(R.drawable.head2);
        final String[] arrayRegion = getResources().getStringArray(R.array.arrayRegion);
        final boolean[] selectItems = new boolean[arrayRegion.length];
        for (int i = 0; i < arrayRegion.length; i++) {
            selectItems[i] = false;
        }
        builder.setMultiChoiceItems(arrayRegion, selectItems,
          new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i,boolean b) {

            }
        });
        builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int position) {
                String str = "";
                for (int i = 0; i < arrayRegion.length; i++) {
                    if (selectItems[i]) {
                        str += arrayRegion[i] + " ";
                    }
                }
                Toast.makeText(TestAlertDialogActivity.this, str,
                        Toast.LENGTH_SHORT).show();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(TestAlertDialogActivity.this,
                        "您點擊的是取消按鈕", Toast.LENGTH_SHORT).show();
            }
        });
        builder.create().show();
    }

    ///顯示設置arrayAdpater的對話框
    public void showAdapterListDialog(View view) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Adapter對話框");
        builder.setIcon(R.drawable.head2);
        final String[] arrayRegion = getResources().
                getStringArray(R.array.arrayRegion);
        ArrayAdapter arrayAdapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, arrayRegion);
        builder.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });

        builder.create().show();
    }

    ///顯示自定義view的對話框
    public void showViewDialog(View view) {
        View view2 = getLayoutInflater().
                inflate(R.layout.item_testalertdialog_alertdialog, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("自定義View對話框");
        builder.setIcon(R.drawable.head2);
        builder.setView(view2);

        builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int position) {
                Toast.makeText(TestAlertDialogActivity.this,
                        "點擊提交按鈕", Toast.LENGTH_SHORT).show();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(TestAlertDialogActivity.this,
                        "您點擊的是取消按鈕", Toast.LENGTH_SHORT).show();
            }
        });
        builder.create().show();
    }

    ///顯示對輸入表單進行驗證的對話框,如果不合法不允許關閉對話框
    public void showNoClosedDialog(View view) {
        View view2 = getLayoutInflater().
                inflate(R.layout.item_testalertdialog_alertdialog, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("自定義View對話框");
        builder.setIcon(R.drawable.head2);
        builder.setView(view2);
        final EditText et_name = (EditText) view2.findViewById(R.id.et_name);
        final EditText et_phone = (EditText) view2.findViewById(R.id.et_phone);
        builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int position) {
                AlertDialog alertDialog = (AlertDialog) dialogInterface;
                Field field = null;
                try {
                    field = dialogInterface.getClass().
                            getSuperclass().getDeclaredField("mShowing");
                    field.setAccessible(true);
                    field.set(dialogInterface, false);


                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (TextUtils.isEmpty(et_name.getText().toString()) ||
                        TextUtils.isEmpty(et_phone.getText().toString())) {

                    Toast.makeText(TestAlertDialogActivity.this,
                            "姓名或手機號不能爲空", Toast.LENGTH_SHORT).show();
                } else {
                    try {
                        field.set(dialogInterface, true);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }

                    //     dialogInterface.dismiss();
                }


            }
        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Field field = null;
                try {
                    field = dialogInterface.getClass().getSuperclass().
                            getDeclaredField("mShowing");
                    field.setAccessible(true);
                    field.set(dialogInterface, true);
                    dialogInterface.dismiss();
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        });
        builder.create().show();
    }


}
主界面佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showNomalDialog"
        android:text="普通對話框" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showListDialog"
        android:text="簡單列表對話框" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showSingleListDialog"
        android:text="單選列表對話框" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showMultiListDialog"
        android:text="多選列表對話框" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showAdapterListDialog"
        android:text="Adapter列表對話框" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showViewDialog"
        android:text="自定義View對話框" />


    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="showNoClosedDialog"
        android:text="點擊確定按鈕不關閉對話框" />
</LinearLayout>

自定義對話框view佈局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:stretchColumns="1">
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="用戶名"
                android:textSize="17sp" />
            <EditText
                android:id="@+id/et_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="請輸入用戶名"
                android:selectAllOnFocus="true"
                android:textColorHint="#238745" />
        </TableRow>
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="密碼"
                android:textSize="17sp" />
            <EditText
                android:id="@+id/et_password"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="請輸入密碼"
                android:inputType="textPassword"
                android:selectAllOnFocus="true" />
        </TableRow>
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="年齡"
                android:textSize="17sp" />
            <EditText
                android:id="@+id/et_age"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="請輸入年齡"
                android:inputType="number"
                android:selectAllOnFocus="true" />
        </TableRow>
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="生日"
                android:textSize="17sp" />
            <EditText
                android:id="@+id/et_birthday"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="請輸入生日"
                android:inputType="date"
                android:selectAllOnFocus="true" />
        </TableRow>
        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="手機"
                android:textSize="17sp" />
            <EditText
                android:id="@+id/et_phone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:hint="請輸入手機號"
                android:inputType="phone"
                android:selectAllOnFocus="true" />
        </TableRow>
    </TableLayout>
</LinearLayout>

4 Demo下載

本人微博:honey_11

最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:源碼下載,源碼例子文檔一網打盡。例子源碼,百度網盤地址:

http://pan.baidu.com/s/1cn7v58


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章