android dialog

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


(一)概述

android中的dialog可以分為5類:一般對話框,列表對話框,單選按鈕對話框,多選對話框,自定義對話框。

(二)一般對話框

樣式:


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)擊,對話框的其他區(qū)域取消

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

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

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

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

    }

可以利用Which的值,把以上的代碼簡化:

 private void dialog1_1(){
        //先new出一個監(jiān)聽器,設(shè)置好監(jiān)聽
        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();
    }

(三)列表對話框

樣式:

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();

(四)單選按鈕對話框

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)選中第一個
        //  第三個參數(shù)是監(jiān)聽器
        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)聽器
        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();

(五)多選按鈕對話框

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)聽器
        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會自動根據(jù)你選擇的改變selected數(shù)組的值。
                for (int i=0;i<selected.length;i++){
                    Log.e("hongliang",""+selected[i]);
                }
            }
        });
        builder.create().show();

(六)自定義對話框

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í)對話框里面很多東西都是可以自定義的

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

        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);

        //  對布局中的控件監(jiān)聽
        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算是挺簡單的東西,不過想要駕馭它,不要以為掌握以上的就可以了,你應(yīng)該完全讀透dialog這個控件的源碼,并且自己能寫出來。雖然說,不建議重復(fù)制作輪子,但是,我們必須有造輪子的能力。
以后我會寫一篇造dialog輪子的文章,不過不知道是什么時候了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容