dialog 的使用與自定義

AlertDialog 使用

這篇文章將介紹一些 AlertDialog 常用的樣式,修改按鈕字體顏色裸影,添加dialog的顯示唐片、消失的動(dòng)畫抛寝。最后將向你介紹如何自定義一個(gè) AlertDialog。源碼地址 : https://github.com/Mrqinlei/CustomDialog

Material Dialog

本文中使用的 AlertDialog 是 android.support.v7.app 中的它與 android.app 中的不同可以參考這篇文章: http://www.reibang.com/p/6caffdbcd5db ,現(xiàn)在介紹它的基本用法.

基本使用

基本樣式

  • 設(shè)置圖標(biāo)
        builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo)
  • 設(shè)置標(biāo)題
        builder.setTitle("Material Design Dialog");//設(shè)置標(biāo)題 
  • 設(shè)置內(nèi)容
        builder.setMessage("這是 Material Design Dialog");//設(shè)置內(nèi)容  
  • 設(shè)置按鈕
    • 確定按鈕
            builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
                }
            });
-   取消按鈕
            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
                }
            });
-   中立按鈕
            builder.setNeutralButton("中性", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "中性", Toast.LENGTH_SHORT).show();
                }
            });
-   顯示 dialog
            builder.show();

修改頭布局

    builder.setCustomTitle(view);

列表選項(xiàng)

    builder.setItems(new String[]{"Item1", "Item2", "Item3"}, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(MainActivity.this, "which " + which, Toast.LENGTH_SHORT).show();
                }
            });

單選列表選項(xiàng)

    builder.setSingleChoiceItems(
                    new String[]{"233333", "hahahaha", "lalalala"},//內(nèi)容定義
                    0, //-1,代表默認(rèn)不選擇
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(MainActivity.this, "which" + which, Toast.LENGTH_SHORT).show();
                        }
                    });

列表選項(xiàng),列表布局可自定義

        final List<MyListBean> lists = new ArrayList<>();
        lists.add(new MyListBean("23232", "232323232323232"));
        lists.add(new MyListBean("hahah", "hahahahhahhahah"));
        lists.add(new MyListBean("lalal", "lalalalallalala"));
        builder.setAdapter(new MyListAdapter(MainActivity.this, lists), new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(MainActivity.this, lists.get(which).title, Toast.LENGTH_SHORT).show();
            }
        });

多選列表選項(xiàng)

builder.setMultiChoiceItems(
                new String[]{"233333", "hahahaha", "lalalala"},//內(nèi)容定義
                new boolean[]{true, false, false},
                new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        Toast.makeText(MainActivity.this, "which " + which + " " + isChecked, Toast.LENGTH_SHORT).show();
                    }
                });

自定義 content 布局

    View view1 = View.inflate(this, R.layout.normal_dialog, null);
    final EditText editText = (EditText) view1.findViewById(R.id.normal_dialog_edittext);
    builder.setView(view1);

ProgressDialog 加載中 dialog

        ProgressDialog progressDialog = new ProgressDialog(this, R.style.CustomDialog);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//默認(rèn)
        progressDialog.setCancelable(true);
        progressDialog.setCanceledOnTouchOutside(true);
        progressDialog.show();

new ProgressDialog(this, R.style.CustomDialog); 中的第二個(gè)參數(shù) R.style.CustomDialog 可以為 Dialog 設(shè)置一些不同的風(fēng)格:

    <style name="CustomDialog" parent="Theme.AppCompat.Dialog">
        <item name="android:backgroundDimEnabled">true</item><!--true 屏幕變暗-->
        <item name="android:windowBackground">@android:color/transparent</item><!-- 背景透明 -->
    </style>

進(jìn)度條 dialog

        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("軟件更新");
        progressDialog.setMessage("新版本來了,快來下載吧!");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        progressDialog.setCancelable(true);
        progressDialog.setCanceledOnTouchOutside(true);
        progressDialog.setMax(100);

通過 setProgress(); 方法設(shè)置進(jìn)度條的進(jìn)度

自定義 dialog (一個(gè)帶圓角的 dialog)

布局文件

設(shè)置一個(gè)圓角的背景 android:background="@drawable/custom_dialog"

    <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="280dp"
            android:layout_height="200dp"
            android:background="@drawable/custom_dialog"
            android:orientation="vertical">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:text="Custom Dialog"
                android:textColor="@android:color/black"
                android:textSize="24sp" />
    </LinearLayout>

定義一個(gè) Style:

    <!--自定義Dialog-->
    <style name="CustomDialog" parent="Theme.AppCompat.Dialog">
        <item name="android:backgroundDimEnabled">true</item><!--true 屏幕變暗-->
        <item name="android:windowBackground">@android:color/transparent</item><!-- 背景透明 -->
    </style>

自定義 Dialog,使用定義的 Style

    public class CustomDialog extends AlertDialog {
        public CustomDialog(@NonNull Context context) {
            this(context, R.style.CustomDialog); //設(shè)置Style
        }
        protected CustomDialog(@NonNull Context context, @StyleRes int themeResId) {
            super(context, themeResId);
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            init(getContext());
        }
        private void init(final Context context) {
    //        setCancelable(true);//是否可以取消 (也可以在調(diào)用處設(shè)置)
    //        setCanceledOnTouchOutside(false);//是否點(diǎn)擊外部消失
            setContentView(R.layout.custom_dialog);
            WindowManager.LayoutParams params = getWindow().getAttributes();
            params.width = WindowManager.LayoutParams.WRAP_CONTENT;
            params.height = WindowManager.LayoutParams.WRAP_CONTENT;
            Window dialog_window = this.getWindow();
            dialog_window.setGravity(Gravity.CENTER);//設(shè)置顯示的位置
            dialog_window.setAttributes(params);//設(shè)置顯示的大小
        }
    }

添加動(dòng)畫效果

添加動(dòng)畫

  • 進(jìn)入動(dòng)畫
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="200">
        <translate
            android:fromYDelta="100%"
            android:toYDelta="0" />
        <alpha
            android:fromAlpha="0"
            android:toAlpha="1" />
    
    </set>
  • 退出動(dòng)畫
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="200">
        <translate
            android:fromYDelta="0"
            android:toYDelta="100%" />
        <alpha
            android:fromAlpha="1"
            android:toAlpha="0" />
    </set>

Style文件設(shè)置

    <!--自定義Dialog-->
    <style name="CustomDialog" parent="Theme.AppCompat.Dialog">
        <item name="android:backgroundDimEnabled">true</item><!--true 屏幕變暗-->
        <item name="android:windowBackground">@android:color/transparent</item><!-- 背景透明 -->
        <!-- Dialog進(jìn)入及退出動(dòng)畫 -->
        <item name="android:windowAnimationStyle">@style/DialogAnimation</item>
    </style>
    <!-- Dialog進(jìn)出動(dòng)畫 -->
    <style name="DialogAnimation" parent="@android:style/Animation.Dialog">
        <item name="android:windowEnterAnimation">@anim/custom_dialog_in</item>
        <item name="android:windowExitAnimation">@anim/custom_dialog_out</item>
    </style>

構(gòu)造方法中使用

    CustomDialog(@NonNull Context context, @StyleRes int themeResId)

修改 dialog 底部按鈕的顏色

設(shè)置 Style

    <style name="CustomDialogButton" parent="Theme.AppCompat.Light.Dialog">
        <item name="buttonBarPositiveButtonStyle">@style/buttonBarPositive</item>
        <item name="buttonBarNeutralButtonStyle">@style/buttonBarNeutral</item>
        <item name="buttonBarNegativeButtonStyle">@style/buttonBarNegative</item>
    </style>
    <style name="buttonBarPositive" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
        <item name="android:textColor">@color/sure</item>
    </style>
    <style name="buttonBarNegative" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
        <item name="android:textColor">@color/cancel</item>
    </style>
    <style name="buttonBarNeutral" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
        <item name="android:textColor">@color/neutrality</item>
    </style> 

構(gòu)造方法中使用

    CustomDialog(@NonNull Context context, @StyleRes int themeResId)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沐兵,一起剝皮案震驚了整個(gè)濱河市草娜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌痒筒,老刑警劉巖宰闰,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茬贵,死亡現(xiàn)場離奇詭異,居然都是意外死亡移袍,警方通過查閱死者的電腦和手機(jī)解藻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葡盗,“玉大人螟左,你說我怎么就攤上這事∶俟唬” “怎么了胶背?”我有些...
    開封第一講書人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喘先。 經(jīng)常有香客問我钳吟,道長,這世上最難降的妖魔是什么窘拯? 我笑而不...
    開封第一講書人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任红且,我火速辦了婚禮,結(jié)果婚禮上涤姊,老公的妹妹穿的比我還像新娘暇番。我一直安慰自己,他們只是感情好思喊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開白布壁酬。 她就那樣靜靜地躺著,像睡著了一般恨课。 火紅的嫁衣襯著肌膚如雪舆乔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評(píng)論 1 290
  • 那天庄呈,我揣著相機(jī)與錄音蜕煌,去河邊找鬼。 笑死诬留,一個(gè)胖子當(dāng)著我的面吹牛斜纪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播文兑,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼盒刚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绿贞?” 一聲冷哼從身側(cè)響起因块,我...
    開封第一講書人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎籍铁,沒想到半個(gè)月后涡上,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趾断,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年吩愧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芋酌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡雁佳,死狀恐怖脐帝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糖权,我是刑警寧澤堵腹,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站星澳,受9級(jí)特大地震影響疚顷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜募判,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一荡含、第九天 我趴在偏房一處隱蔽的房頂上張望咒唆。 院中可真熱鬧届垫,春花似錦、人聲如沸全释。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽浸船。三九已至妄迁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間李命,已是汗流浹背登淘。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留封字,地道東北人黔州。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像阔籽,于是被迫代替她去往敵國和親流妻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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