Android AlertDialog的各種用法總結(jié)

參考:Android的AlertDialog詳解

最簡單的用法(詳見注釋)

            // 1列牺、創(chuàng)建簡單的AlertDialog // AlertDialog的構(gòu)造方法全部是Protected的,
            // 所以不能直接通過new一個AlertDialog來創(chuàng)建出一個AlertDialog; //
            // (1)要創(chuàng)建一個AlertDialog,就要用到AlertDialog.Builder
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);

            // (2)設(shè)置各種屬性 // 注:不設(shè)置哪項屬性慷蠕,這個屬性就默認(rèn)不會顯示出來
            dialog.setTitle("這是一個簡單的對話框");
            dialog.setIcon(R.drawable.dictation2_64);
            dialog.setMessage("歡迎使用!");

            // (3)設(shè)置dialog可否被取消 
            dialog.setCancelable(true);

            // (4)顯示出來 
            dialog.show();

效果如下:


帶按鈕的AlertDialog

// 2碴犬、帶按鈕的AlertDialog
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setTitle("確認(rèn)");
            dialog.setIcon(R.drawable.dictation2_64);
            dialog.setMessage("確定要刪除此項嗎胡嘿?");

            // 設(shè)置“確定”按鈕,使用DialogInterface.OnClickListener接口參數(shù)
            dialog.setPositiveButton("確定",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("Dialog", "點擊了“確認(rèn)”按鈕");
                        }
                    });

            // 設(shè)置“查看詳情”按鈕,使用DialogInterface.OnClickListener接口參數(shù)
            dialog.setNeutralButton("查看詳情",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("Dialog", "點擊了“查看詳情”按鈕");
                        }
                    });

            // 設(shè)置“取消”按鈕,使用DialogInterface.OnClickListener接口參數(shù)
            dialog.setNegativeButton("取消",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("Dialog", "點擊了“取消”按鈕");
                        }
                    });

            dialog.show();

效果如下:


類似于ListView的AlertDialog

setItems(CharSequence[] items, final OnClickListener listener)方法來實現(xiàn)類似ListView的AlertDialog:

// 3、類似ListView的AlertDialog
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setTitle("請選擇一項運動");
            dialog.setIcon(R.drawable.dictation2_64);
            // 設(shè)置為false說明當(dāng)前dialog是不能用返回鍵取消的
            dialog.setCancelable(false);
            
            // 列表字符串?dāng)?shù)組
            final String[] sportsArray = new String[] { "跑步", "籃球", "游泳",
                    "自行車", "羽毛球" };
            // 用于在item的點擊事件中照棋,記錄選擇的是哪一項,初始值設(shè)為0.這里用final數(shù)組只是因為匿名內(nèi)部類中只能使用外部終態(tài)的變量
            final int selectedIndex[] = { 0 };

            // 用setItems方法來實現(xiàn)
            dialog.setItems(sportsArray, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    selectedIndex[0] = which;
                    Log.d("Dialog", "選擇了:" + sportsArray[selectedIndex[0]]);
                }
            });

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

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("Dialog", "點擊了“取消”按鈕");
                        }
                    });

            dialog.show();

效果如下:


類似RadioButton的AlertDialog

setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)方法來實現(xiàn)類似RadioButton的AlertDialog武翎。

第一個參數(shù)是要顯示的數(shù)據(jù)的數(shù)組烈炭,第二個參數(shù)是初始值(初始被選中的item),第三個參數(shù)是點擊某個item的觸發(fā)事件宝恶。

// 4符隙、類似RadioButton的AlertDialog
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setTitle("請選擇一項運動");
            dialog.setIcon(R.drawable.dictation2_64);

            // 列表字符串?dāng)?shù)組
            final String[] sportsArray = new String[] { "跑步", "籃球", "游泳",
                    "自行車", "羽毛球" };
            // 用于在item的點擊事件中,記錄選擇的是哪一項垫毙,初始值設(shè)為0.這里用final數(shù)組只是因為匿名內(nèi)部類中只能使用外部終態(tài)的變量
            final int selectedIndex[] = { 0 };

            // 用setSingleChoiceItems方法來實現(xiàn)
            dialog.setSingleChoiceItems(sportsArray, 0,
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            selectedIndex[0] = which;

                        }
                    });

            dialog.setPositiveButton("確定",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("Dialog", "選擇了:"
                                    + sportsArray[selectedIndex[0]]);
                        }
                    });

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

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("Dialog", "點擊了“取消”按鈕");
                        }
                    });

            dialog.show();

效果如下:


類似CheckBox的AlertDialog

setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener)方法來實現(xiàn)類似CheckBox的AlertDialog霹疫,第一個參數(shù)是要顯示的數(shù)據(jù)的數(shù)組,第二個參數(shù)是選中狀態(tài)的數(shù)組综芥,第三個參數(shù)是點擊某個item的觸發(fā)事件丽蝎。

// 5、類似CheckBox的AlertDialog
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setTitle("請選擇喜歡的運動(可多選)");
            dialog.setIcon(R.drawable.dictation2_64);

            // 列表字符串?dāng)?shù)組
            final String[] sportsArray = new String[] { "跑步", "籃球", "游泳",
                    "自行車", "羽毛球" };
            // 用于在item的點擊事件中膀藐,記錄選擇了哪些項.
            final boolean[] selectedIndex = { true, true, false, false, false };

            // 用setMultiChoiceItems方法來實現(xiàn)
            dialog.setMultiChoiceItems(sportsArray, selectedIndex,
                    new DialogInterface.OnMultiChoiceClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which,
                                boolean isChecked) {
                            selectedIndex[which] = isChecked;
                        }
                    });

            dialog.setPositiveButton("確定",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            for (int i = 0; i < selectedIndex.length; i++) {
                                if (selectedIndex[i]) {
                                    Log.d("Dialog", "選擇了:" + sportsArray[i]);
                                }
                            }
                        }
                    });

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

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Log.d("Dialog", "點擊了“取消”按鈕");
                        }
                    });

            dialog.show();

效果如下:


自定義View的AlertDialog

有時候系統(tǒng)自帶的AlertDialog風(fēng)格不能滿足我們的需求屠阻,就比如說我們要實現(xiàn)一個Login畫面,有用戶名和密碼消请,這時我們就要用到自定義View的AlertDialog栏笆,步驟如下:

  • 先創(chuàng)建自定義登錄框的布局文件my_login_view.xml
<?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" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="5dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="賬號:" />

        <EditText
            android:id="@+id/my_login_account_et"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="5dp" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密碼:" />

        <EditText
            android:id="@+id/my_login_password_et"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:inputType="numberPassword" />
    </LinearLayout>

</LinearLayout>
  • 在Activity的合適地方創(chuàng)建自定義的AlertDialog(比如按鈕的點擊事件中):
// 6、自定義View的AlertDialog
            AlertDialog.Builder dialog = new AlertDialog.Builder(this);
            dialog.setTitle("用戶登錄");

            // 取得自定義View
            LayoutInflater layoutInflater = LayoutInflater.from(this);
            final View myLoginView = layoutInflater.inflate(
                    R.layout.my_login_view, null);
            dialog.setView(myLoginView);

            dialog.setPositiveButton("確定",
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            EditText loginAccountEt = (EditText) myLoginView
                                    .findViewById(R.id.my_login_account_et);
                            EditText loginPasswordEt = (EditText) myLoginView
                                    .findViewById(R.id.my_login_password_et);
                            Log.d("MyLogin Dialog", "輸入的用戶名是:"
                                    + loginAccountEt.getText().toString());
                            Log.d("MyLogin Dialog", "輸入的密碼是:"
                                    + loginPasswordEt.getText().toString());
                        }
                    });

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

                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                        }
                    });

            dialog.show();

效果如下:



點擊“確定”按鈕后LogCat中的內(nèi)容:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末臊泰,一起剝皮案震驚了整個濱河市蛉加,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖针饥,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厂抽,死亡現(xiàn)場離奇詭異,居然都是意外死亡丁眼,警方通過查閱死者的電腦和手機筷凤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苞七,“玉大人藐守,你說我怎么就攤上這事□宸纾” “怎么了卢厂?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惠啄。 經(jīng)常有香客問我慎恒,道長,這世上最難降的妖魔是什么撵渡? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任融柬,我火速辦了婚禮,結(jié)果婚禮上趋距,老公的妹妹穿的比我還像新娘粒氧。我一直安慰自己,他們只是感情好棚品,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布靠欢。 她就那樣靜靜地躺著廊敌,像睡著了一般铜跑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骡澈,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天锅纺,我揣著相機與錄音,去河邊找鬼肋殴。 笑死囤锉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的护锤。 我是一名探鬼主播官地,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烙懦!你這毒婦竟也來了驱入?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亏较,沒想到半個月后莺褒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡雪情,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年遵岩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巡通。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡尘执,死狀恐怖宴凉,靈堂內(nèi)的尸體忽然破棺而出正卧,到底是詐尸還是另有隱情,我是刑警寧澤跪解,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布炉旷,位于F島的核電站,受9級特大地震影響叉讥,放射性物質(zhì)發(fā)生泄漏窘行。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一图仓、第九天 我趴在偏房一處隱蔽的房頂上張望罐盔。 院中可真熱鬧,春花似錦救崔、人聲如沸惶看。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纬黎。三九已至,卻和暖如春劫窒,著一層夾襖步出監(jiān)牢的瞬間本今,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工主巍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冠息,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓孕索,卻偏偏與公主長得像逛艰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子搞旭,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容