android dialog

參考于:
Android之Dialog詳解
7種形式的Android Dialog使用舉例


(一)概述

android中的dialog可以分為5類:一般對(duì)話框冈涧,列表對(duì)話框世吨,單選按鈕對(duì)話框,多選對(duì)話框呻征,自定義對(duì)話框耘婚。

(二)一般對(duì)話框

樣式:


20150306140325734[1].png
AlertDialog.Builder builder = new AlertDialog.Builder(this);        //先得到構(gòu)造器
        builder.setTitle("提示");                                         //設(shè)置標(biāo)題
        builder.setMessage("是否確認(rèn)退出");       //設(shè)置內(nèi)容
        builder.setIcon(R.mipmap.ic_launcher);   //自定義圖標(biāo)
        builder.setCancelable(false);           //設(shè)置是否能點(diǎn)擊,對(duì)話框的其他區(qū)域取消

        builder.setPositiveButton("確認(rèn)", new DialogInterface.OnClickListener() {     //設(shè)置其確認(rèn)按鈕和監(jiān)聽(tīng)事件
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //  which陆赋,是哪一個(gè)按鈕被觸發(fā)
                //      其值如下:
                //   Dialog.BUTTON_NEGATIVE     忽略
                //   Dialog.BUTTON_POSITIVE     確認(rèn)
                //   Dialog.BUTTON_NEUTRAL      取消            
                dialog.dismiss();
            }
        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {     //設(shè)置其取消按鈕和監(jiān)聽(tīng)事件
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        builder.setNegativeButton("忽略", new DialogInterface.OnClickListener() {     //設(shè)置其忽略按鈕和監(jiān)聽(tīng)事件
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();     
            }
        });

        builder.create();       //創(chuàng)建對(duì)話框
        builder.show();         //顯示對(duì)話框

    }

可以利用Which的值沐祷,把以上的代碼簡(jiǎn)化:

 private void dialog1_1(){
        //先new出一個(gè)監(jiān)聽(tīng)器,設(shè)置好監(jiān)聽(tīng)
        DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){

            @Override
            public void onClick(DialogInterface dialog, int which) {
                switch(which){
                    case Dialog.BUTTON_POSITIVE:
                        Toast.makeText(MainActivity.this, "確認(rèn)" + which, Toast.LENGTH_SHORT).show();
                        break;
                    case Dialog.BUTTON_NEGATIVE:
                        Toast.makeText(MainActivity.this, "取消" + which, Toast.LENGTH_SHORT).show();
                        break;
                    case Dialog.BUTTON_NEUTRAL:
                        Toast.makeText(MainActivity.this, "忽略" + which, Toast.LENGTH_SHORT).show();
                        break;
                }
            }
        };
        //dialog參數(shù)設(shè)置
        AlertDialog.Builder builder=new AlertDialog.Builder(this);  //先得到構(gòu)造器
        builder.setTitle("提示"); //設(shè)置標(biāo)題
        builder.setMessage("是否確認(rèn)退出?"); //設(shè)置內(nèi)容
        builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo)奏甫,圖片id即可
        builder.setPositiveButton("確認(rèn)",dialogOnclicListener);
        builder.setNegativeButton("取消", dialogOnclicListener);
        builder.setNeutralButton("忽略", dialogOnclicListener);
        builder.create().show();
    }

(三)列表對(duì)話框

樣式:

2016-04-18_100530.png
        final String items[] = {"AAA","BBB","CCC"};

        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setTitle("提示"); //設(shè)置標(biāo)題

        //builder.setMessage("是否確認(rèn)退出?"); //設(shè)置內(nèi)容

        builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo)戈轿,圖片id即可

        //設(shè)置列表顯示,注意設(shè)置了列表顯示就不要設(shè)置builder.setMessage()了阵子,否則列表不起作用思杯。
        builder.setItems(items,new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();

            }
        });

        builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
            }
        });
        builder.create().show();

(四)單選按鈕對(duì)話框

2016-04-18_101253.png
        final String items[]={"男","未知","女"};
        AlertDialog.Builder builder=new AlertDialog.Builder(this);  //先得到構(gòu)造器
        builder.setTitle("提示");                                     //設(shè)置標(biāo)題
        builder.setIcon(R.mipmap.ic_launcher);                      //設(shè)置圖標(biāo),圖片id即可

        //設(shè)置單選按鈕
        //  items   為列表項(xiàng)
        //  0       為默認(rèn)選中第一個(gè)
        //  第三個(gè)參數(shù)是監(jiān)聽(tīng)器
        builder.setSingleChoiceItems(items,0,new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                //dialog.dismiss();
                Toast.makeText(MainActivity.this, items[which], Toast.LENGTH_SHORT).show();
            }
        });

        //  設(shè)置監(jiān)聽(tīng)器
        builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
            }
        });
        builder.create().show();

(五)多選按鈕對(duì)話框

2016-04-18_101741.png
        final String items[]={"籃球","足球","排球"};
        final boolean selected[]={true,false,true};
        AlertDialog.Builder builder=new AlertDialog.Builder(this);  //先得到構(gòu)造器
        builder.setTitle("提示"); //設(shè)置標(biāo)題
        builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo)挠进,圖片id即可

        //  參數(shù)一:列表項(xiàng)
        //  參數(shù)二:默認(rèn)打勾的
        //  參數(shù)三:監(jiān)聽(tīng)器
        builder.setMultiChoiceItems(items,selected,new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                // dialog.dismiss();
                Toast.makeText(MainActivity.this, items[which]+isChecked, Toast.LENGTH_SHORT).show();
            }
        });
        //  確認(rèn)按鈕
        builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
                //android會(huì)自動(dòng)根據(jù)你選擇的改變selected數(shù)組的值色乾。
                for (int i=0;i<selected.length;i++){
                    Log.e("hongliang",""+selected[i]);
                }
            }
        });
        builder.create().show();

(六)自定義對(duì)話框

2016-04-18_103914.png

dialog的布局文件

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


    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:gravity="center"
        android:hint="name"
        android:ems="10"
        android:id="@+id/editText_name"
        android:layout_gravity="center_horizontal" />

    <EditText
        android:gravity="center"
        android:hint="password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/editText_password"
        android:layout_gravity="center_horizontal" />
</LinearLayout>

代碼:

        //其實(shí)對(duì)話框里面很多東西都是可以自定義的

        //  1.  圖標(biāo)
        //  2.  整個(gè)布局

        AlertDialog.Builder builder=new AlertDialog.Builder(this);  //先得到構(gòu)造器
        builder.setTitle("自定義dialog");             //設(shè)置標(biāo)題
        builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo),圖片id即可

        //  載入布局
        LayoutInflater inflater = getLayoutInflater();
        View layout = inflater.inflate(R.layout.dialog_cell,null);
        builder.setView(layout);

        //  對(duì)布局中的控件監(jiān)聽(tīng)
        EditText editText_name = (EditText) layout.findViewById(R.id.editText_name);
        EditText editText_password = (EditText) layout.findViewById(R.id.editText_password);
        editText_name.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"name is on click",Toast.LENGTH_LONG).show();
            }
        });

        //  確認(rèn)按鈕
        builder.setPositiveButton("確定",new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        //  顯示
        builder.create().show();

(七)總結(jié)

其實(shí)dialog算是挺簡(jiǎn)單的東西领突,不過(guò)想要駕馭它暖璧,不要以為掌握以上的就可以了,你應(yīng)該完全讀透dialog這個(gè)控件的源碼君旦,并且自己能寫出來(lái)澎办。雖然說(shuō),不建議重復(fù)制作輪子金砍,但是局蚀,我們必須有造輪子的能力。
以后我會(huì)寫一篇造dialog輪子的文章恕稠,不過(guò)不知道是什么時(shí)候了琅绅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鹅巍,隨后出現(xiàn)的幾起案子千扶,更是在濱河造成了極大的恐慌,老刑警劉巖骆捧,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澎羞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡敛苇,警方通過(guò)查閱死者的電腦和手機(jī)妆绞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人摆碉,你說(shuō)我怎么就攤上這事塘匣。” “怎么了巷帝?”我有些...
    開(kāi)封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵忌卤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我楞泼,道長(zhǎng)驰徊,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任堕阔,我火速辦了婚禮棍厂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘超陆。我一直安慰自己牺弹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布时呀。 她就那樣靜靜地躺著张漂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谨娜。 梳的紋絲不亂的頭發(fā)上航攒,一...
    開(kāi)封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音趴梢,去河邊找鬼漠畜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛坞靶,可吹牛的內(nèi)容都是我干的憔狞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滩愁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼躯喇!你這毒婦竟也來(lái)了辫封?” 一聲冷哼從身側(cè)響起硝枉,我...
    開(kāi)封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倦微,沒(méi)想到半個(gè)月后妻味,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欣福,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年责球,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雏逾,死狀恐怖嘉裤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情栖博,我是刑警寧澤屑宠,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站仇让,受9級(jí)特大地震影響典奉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丧叽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一卫玖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧踊淳,春花似錦假瞬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至雹舀,卻和暖如春芦劣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背说榆。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工虚吟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人签财。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓串慰,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親唱蒸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邦鲫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,099評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,757評(píng)論 22 665
  • 在Android開(kāi)發(fā)中,我們經(jīng)常會(huì)需要在Android界面上彈出一些對(duì)話框神汹,比如詢問(wèn)用戶或者讓用戶選擇庆捺。這些功能我...
    lucky_yaya閱讀 3,551評(píng)論 0 4
  • 練習(xí)硬筆書法,用不上文房四寶屁魏,只需要紙滔以、筆、貼三樣氓拼。而且你画,挑選也挺隨意抵碟,要求不高,要貼近生活坏匪、貼近實(shí)際拟逮。 用于書法...
    樊建平閱讀 2,438評(píng)論 1 2
  • 不知不覺(jué)參加易效能時(shí)間管理課程的百日踐行活動(dòng)就接近尾聲了,回首當(dāng)初參加踐行班的初衷适滓,希望通過(guò)100天的學(xué)習(xí)收獲不一...
    西景飄閱讀 557評(píng)論 2 0