Dialog對話框

Dialog對話框

一、常用的對話框

1.普通對話框

普通對話框效果圖

代碼實現(xiàn):

//普通對話框方法
    private void normal_dialog() {
        //構(gòu)建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //設(shè)置屬性
            builder.setTitle("普通對話框")   //設(shè)置標題
                .setIcon(R.mipmap.paidaixing)//設(shè)置圖標
                .setMessage("是否同意?")     //設(shè)置內(nèi)容
                .setCancelable(true);        //點擊對話框外部首妖,對話框關(guān)閉
            //設(shè)置確定按鈕
            builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(MainActivity.this, "已同意", Toast.LENGTH_SHORT).show();
                }
            });
            //設(shè)置取消按鈕
            builder.setNegativeButton("不同意", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Toast.makeText(MainActivity.this, "您不同意", Toast.LENGTH_SHORT).show();
                }
            });
        //使用建造者創(chuàng)建對話框
        AlertDialog dialog = builder.create();
        dialog.show(); //顯示對話框
    }

2.單選對話框

單選對話框效果圖

代碼實現(xiàn):

//單選對話框方法
    private void single_dialog() {
        //構(gòu)建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //設(shè)置屬性
        builder.setIcon(R.mipmap.paidaixing)//設(shè)置圖標
                .setTitle("選擇您的需求")   //設(shè)置標題
                .setCancelable(true);       //點擊對話框外部,對話框關(guān)閉
        //確定按鈕
        builder.setPositiveButton("完成", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "已完成", Toast.LENGTH_SHORT).show();
            }
        });
        //取消按鈕
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "已取消", Toast.LENGTH_SHORT).show();
            }
        });
        //設(shè)置選項內(nèi)容
        final String[] items = {"打滴","公交","騎行","徒步"};
        //參數(shù)一 列表  參數(shù)二 默認選中下表  參數(shù)三 事件監(jiān)聽
        builder.setSingleChoiceItems(items, 1, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "您的選擇為:"+items[i], Toast.LENGTH_SHORT).show();
            }
        });
        //使用建造者創(chuàng)建對話框
        AlertDialog dialog = builder.create();
        dialog.show();//顯示對話框
    }

3.多選對話框

多選對話框效果圖

代碼實現(xiàn):

//多選對話框方法
    private void mulite_dialog() {
        //定義選項
        final String[] items = {"唱","跳","rap","籃球"};
        //設(shè)置默認選中(true為選中)
        final boolean[] flags = {true,true,true,true};
        //構(gòu)建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //設(shè)置屬性
        builder.setIcon(R.mipmap.paidaixing)//設(shè)置圖標
                .setTitle("選擇您的興趣")   //設(shè)置標題
                .setPositiveButton("完成", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int which) {
                        for (int i = 0; i < flags.length; i++) {
                            if (flags[i]){
                                Toast.makeText(MainActivity.this, "您選擇了:"+items[i], Toast.LENGTH_SHORT).show();
                            }
                        }
                    }
                });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Toast.makeText(MainActivity.this, "您取消您??呢铣口?", Toast.LENGTH_SHORT).show();
            }
        });
        //設(shè)置多選列表
        //參數(shù)一 列表  參數(shù)二 默認選中下表  參數(shù)三 事件監(jiān)聽
        builder.setMultiChoiceItems(items, flags, new DialogInterface.OnMultiChoiceClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i, boolean b) {
                flags[i] = b;
            }
        });
        //使用建造者創(chuàng)建對話框
        AlertDialog dialog = builder.create();
        dialog.show();//顯示對話框
    }

4.簡單自定義對話框

效果圖
①自定義布局:custom_item.xml
<?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">

    <ImageView
        android:id="@+id/image_View"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/sleep"/>

</LinearLayout>
②點擊彈出框或彈框外部關(guān)閉對話框彻亲,java代碼實現(xiàn):
//簡單自定義對話框
    private void custom_dialog() {
        //獲得視圖
        View view = LayoutInflater.from(this).inflate(R.layout.custom_item, null);
        ImageView image = view.findViewById(R.id.image_View);
        //構(gòu)建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //設(shè)置自定義布局
        builder.setView(view);
        //使用構(gòu)建者創(chuàng)建對話框
        final AlertDialog dialog = builder.create();
        dialog.show();//顯示對話框
        //點擊彈框關(guān)閉對話框
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
    }

5.水平精確進度條對話框

進度條對話框效果圖

代碼實現(xiàn):

//水平精確進度條
    private void hor_progress_dialog() {
        //1:實例化對象
        final ProgressDialog dialog = new ProgressDialog(this);
        //2:設(shè)置屬性
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設(shè)置水平樣式
        dialog.setMax(100);//進度條最大值
        dialog.setMessage("加載中...");//設(shè)置內(nèi)容
        dialog.show();//顯示
        //定時器模擬進度
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            int progress = 0;
            @Override
            public void run() {
                if (progress >= 100){
                    dialog.dismiss();//根據(jù)條件消失
                    timer.cancel();
                }
                dialog.setProgress(progress += 15);
            }
        },0,1000);//0秒后執(zhí)行,每隔1000毫秒執(zhí)行一次
    }

6.日期選擇對話框

日期對話框效果圖 ps:Android版本不同顯示的樣式也不同

代碼實現(xiàn):

//日期選擇對話框DatePickerDialog
    private void date_dialog() {
        /**
         * context 上下文
         * listener 監(jiān)聽器
         * year 默認的年
         * month 默認的月
         * dayOfMonth 默認的日
         */
        Calendar calendar = Calendar.getInstance();//日歷對象
        new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                Toast.makeText(MainActivity.this, "當前日期:"+year+"-"+(month+1)+"-"+dayOfMonth, Toast.LENGTH_SHORT).show();
            }
        },calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH)).show();
    }

7.時間選擇對話框

時間選擇對話框效果圖

代碼實現(xiàn):

//時間選擇對話框:TimePickerDialog
    private void time_dialog() {
        /**
         * context 上下文
         * listener 監(jiān)聽器
         * hourOfDay 默認的時
         * minute 默認的分鐘
         * is24HourView 是否采用24時禁止
         */
        Calendar calendar = Calendar.getInstance();//日歷對象
        new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
            @Override
            public void onTimeSet(TimePicker timePicker, int hour, int minute) {
                Toast.makeText(MainActivity.this, "當前時間:"+hour+":"+minute, Toast.LENGTH_SHORT).show();
            }
        },calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),false).show();
    }

二迹冤、自定義對話框

1.步驟

①.自定義類繼承Dialog
②.重寫Dialog的方法并添加需要的功能
③.在Activity中實例化自定義類的對象

效果圖

自定義對話框效果圖

2.代碼實現(xiàn):

①xml布局:自定義對話框的布局

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

    <RelativeLayout
        android:id="@+id/relative_layout"
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:gravity="center_horizontal">

        <TextView
            android:id="@+id/textView"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:gravity="center"
            android:text="WARNING"
            android:textColor="@android:color/holo_red_dark"
            android:textSize="30dp" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="200dp"
            android:gravity="center"
            android:layout_height="wrap_content"
            android:layout_below="@id/textView"
            android:layout_marginTop="25dp"
            android:text="是否繼續(xù)訪問"
            android:textSize="25sp"/>
        
        <Button
            android:id="@+id/btn_id1"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:text="取消"
            android:background="@android:color/holo_green_light"
            android:textColor="@android:color/holo_red_light"
            android:textSize="15sp"/>

        <Button
            android:id="@+id/btn_id2"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:layout_toRightOf="@id/btn_id1"
            android:text="確定"
            android:textSize="15sp"
            android:background="@android:color/holo_red_light"
            android:textColor="@android:color/holo_green_light"/>

    </RelativeLayout>

</RelativeLayout>

②自定義類繼承Dialog

package com.bwie.androidthesecond;

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;

public class MyDialog extends Dialog {

    private Button button1,button2;      //確定和取消按鈕
    private TextView textView1,textView2;//標題文本和消息文本
    private String titleStr,messageStr;  //外部設(shè)置的title文本和外部設(shè)置的消息文本
    private String yesStr,noStr;         //確定文本和取消文本的顯示內(nèi)容
    private YesOnClickListener yesOnClickListener;//確定按鈕被點擊了的監(jiān)聽器
    private NoOnClickListener noOnClickListener;//取消按鈕被點擊了的監(jiān)聽器
    //定義接口
    public interface NoOnClickListener{
        void onNoClick();
    }
    //set方法
    public void setNoOnClickListener(NoOnClickListener noOnClickListener) {
        this.noOnClickListener = noOnClickListener;
    }
    //定義接口
    public interface YesOnClickListener{
        void onYesClick();
    }
    //set方法
    public void setYesOnClickListener(YesOnClickListener yesOnClickListener){
        this.yesOnClickListener = yesOnClickListener;
    }
    //onCreate方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.custom1_item);
        //初始化界面控件
        textView1 = findViewById(R.id.textView);
        textView2 = findViewById(R.id.textView1);
        button1 = findViewById(R.id.btn_id1);
        button2 = findViewById(R.id.btn_id2);
        //如果用戶自定了title和message
        if (titleStr != null){
            textView1.setText(titleStr);
        }
        if (messageStr != null){
            textView2.setText(messageStr);
        }
        //如果設(shè)置按鈕文字
        if (noStr != null){
            button1.setText(noStr);
        }
        if (yesStr != null){
            button2.setText(yesStr);
        }
        //取消按鈕
        button1.setOnClickListener(new View.OnClickListener() {
            //設(shè)置取消按鈕被點擊后匿垄,向外界提供監(jiān)聽
            @Override
            public void onClick(View view) {
                if (noOnClickListener != null){
                    noOnClickListener.onNoClick();
                    dismiss();
                }
            }
        });
        //確定按鈕
        button2.setOnClickListener(new View.OnClickListener() {
            //設(shè)置確定按鈕被點擊后移宅,向外界提供監(jiān)聽
            @Override
            public void onClick(View view) {
                if (yesOnClickListener != null){
                    yesOnClickListener.onYesClick();
                    dismiss();
                }
            }
        });
    }
    //從外界Activity為Dialog設(shè)置標題
    public void setNoStr(String no){
        noStr = no;
    }

    public void setYesStr(String yes){
        yesStr = yes;
    }

    public void setTitle(String title){
        titleStr = title;
    }

    public void setMessageStr(String message){
        messageStr = message;
    }

    public MyDialog(Context context) {
        super(context);
        //去掉默認的標題欄
        requestWindowFeature(Window.FEATURE_NO_TITLE);
    }

}

③MainActivity代碼 完全自定義對話框方法:

//完全自定義對話框
    private void all_custom_dialog() {
        //創(chuàng)建對象
        MyDialog myDialog = new MyDialog(this);
        myDialog.setTitle("worning");       //設(shè)置標題
        myDialog.setMessageStr("訪問風險"); //設(shè)置消息
        myDialog.setNoStr("不OJBK");//設(shè)置取消按鈕的文本
        //取消按鈕的監(jiān)聽
        myDialog.setNoOnClickListener(new MyDialog.NoOnClickListener() {
            @Override
            public void onNoClick() {
                Toast.makeText(MainActivity.this, "沒有OJBK", Toast.LENGTH_SHORT).show();
            }
        });
        myDialog.setYesStr("OJBK");//設(shè)置確定按鈕的文本
        //確定按鈕的監(jiān)聽
        myDialog.setYesOnClickListener(new MyDialog.YesOnClickListener() {
            @Override
            public void onYesClick() {
                Toast.makeText(MainActivity.this, "OJBK了", Toast.LENGTH_SHORT).show();
            }
        });
        myDialog.show();//顯示對話框
    }

共同學習??????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末归粉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吞杭,更是在濱河造成了極大的恐慌盏浇,老刑警劉巖变丧,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芽狗,死亡現(xiàn)場離奇詭異,居然都是意外死亡痒蓬,警方通過查閱死者的電腦和手機童擎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來攻晒,“玉大人顾复,你說我怎么就攤上這事÷衬螅” “怎么了芯砸?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長给梅。 經(jīng)常有香客問我假丧,道長,這世上最難降的妖魔是什么动羽? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任包帚,我火速辦了婚禮,結(jié)果婚禮上运吓,老公的妹妹穿的比我還像新娘渴邦。我一直安慰自己,他們只是感情好拘哨,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布谋梭。 她就那樣靜靜地躺著,像睡著了一般倦青。 火紅的嫁衣襯著肌膚如雪章蚣。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天姨夹,我揣著相機與錄音纤垂,去河邊找鬼。 笑死磷账,一個胖子當著我的面吹牛峭沦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逃糟,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼吼鱼,長吁一口氣:“原來是場噩夢啊……” “哼蓬豁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起菇肃,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤地粪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后琐谤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟆技,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年斗忌,在試婚紗的時候發(fā)現(xiàn)自己被綠了质礼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡织阳,死狀恐怖眶蕉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唧躲,我是刑警寧澤造挽,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站弄痹,受9級特大地震影響饭入,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜界酒,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一圣拄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毁欣,春花似錦庇谆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至执解,卻和暖如春寞肖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背衰腌。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工新蟆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人右蕊。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓琼稻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饶囚。 傳聞我的和親對象是個殘疾皇子帕翻,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

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