Dialog對(duì)話框

Dialog對(duì)話框

一、常用的對(duì)話框

1.普通對(duì)話框

普通對(duì)話框效果圖

代碼實(shí)現(xiàn):

//普通對(duì)話框方法
    private void normal_dialog() {
        //構(gòu)建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //設(shè)置屬性
            builder.setTitle("普通對(duì)話框")   //設(shè)置標(biāo)題
                .setIcon(R.mipmap.paidaixing)//設(shè)置圖標(biāo)
                .setMessage("是否同意?")     //設(shè)置內(nèi)容
                .setCancelable(true);        //點(diǎn)擊對(duì)話框外部,對(duì)話框關(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)建對(duì)話框
        AlertDialog dialog = builder.create();
        dialog.show(); //顯示對(duì)話框
    }

2.單選對(duì)話框

單選對(duì)話框效果圖

代碼實(shí)現(xiàn):

//單選對(duì)話框方法
    private void single_dialog() {
        //構(gòu)建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //設(shè)置屬性
        builder.setIcon(R.mipmap.paidaixing)//設(shè)置圖標(biāo)
                .setTitle("選擇您的需求")   //設(shè)置標(biāo)題
                .setCancelable(true);       //點(diǎn)擊對(duì)話框外部,對(duì)話框關(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è)置選項(xiàng)內(nèi)容
        final String[] items = {"打滴","公交","騎行","徒步"};
        //參數(shù)一 列表  參數(shù)二 默認(rèn)選中下表  參數(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)建對(duì)話框
        AlertDialog dialog = builder.create();
        dialog.show();//顯示對(duì)話框
    }

3.多選對(duì)話框

多選對(duì)話框效果圖

代碼實(shí)現(xiàn):

//多選對(duì)話框方法
    private void mulite_dialog() {
        //定義選項(xiàng)
        final String[] items = {"唱","跳","rap","籃球"};
        //設(shè)置默認(rèn)選中(true為選中)
        final boolean[] flags = {true,true,true,true};
        //構(gòu)建者
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        //設(shè)置屬性
        builder.setIcon(R.mipmap.paidaixing)//設(shè)置圖標(biāo)
                .setTitle("選擇您的興趣")   //設(shè)置標(biāo)題
                .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ù)二 默認(rèn)選中下表  參數(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)建對(duì)話框
        AlertDialog dialog = builder.create();
        dialog.show();//顯示對(duì)話框
    }

4.簡(jiǎn)單自定義對(duì)話框

效果圖
①自定義布局: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>
②點(diǎn)擊彈出框或彈框外部關(guān)閉對(duì)話框,java代碼實(shí)現(xiàn):
//簡(jiǎn)單自定義對(duì)話框
    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)建對(duì)話框
        final AlertDialog dialog = builder.create();
        dialog.show();//顯示對(duì)話框
        //點(diǎn)擊彈框關(guān)閉對(duì)話框
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
    }

5.水平精確進(jìn)度條對(duì)話框

進(jìn)度條對(duì)話框效果圖

代碼實(shí)現(xiàn):

//水平精確進(jìn)度條
    private void hor_progress_dialog() {
        //1:實(shí)例化對(duì)象
        final ProgressDialog dialog = new ProgressDialog(this);
        //2:設(shè)置屬性
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//設(shè)置水平樣式
        dialog.setMax(100);//進(jìn)度條最大值
        dialog.setMessage("加載中...");//設(shè)置內(nèi)容
        dialog.show();//顯示
        //定時(shí)器模擬進(jìn)度
        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.日期選擇對(duì)話框

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

代碼實(shí)現(xiàn):

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

7.時(shí)間選擇對(duì)話框

時(shí)間選擇對(duì)話框效果圖

代碼實(shí)現(xiàn):

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

二、自定義對(duì)話框

1.步驟

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

效果圖

自定義對(duì)話框效果圖

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

①xml布局:自定義對(duì)話框的布局

<?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;//標(biāo)題文本和消息文本
    private String titleStr,messageStr;  //外部設(shè)置的title文本和外部設(shè)置的消息文本
    private String yesStr,noStr;         //確定文本和取消文本的顯示內(nèi)容
    private YesOnClickListener yesOnClickListener;//確定按鈕被點(diǎn)擊了的監(jiān)聽器
    private NoOnClickListener noOnClickListener;//取消按鈕被點(diǎn)擊了的監(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è)置取消按鈕被點(diǎn)擊后,向外界提供監(jiān)聽
            @Override
            public void onClick(View view) {
                if (noOnClickListener != null){
                    noOnClickListener.onNoClick();
                    dismiss();
                }
            }
        });
        //確定按鈕
        button2.setOnClickListener(new View.OnClickListener() {
            //設(shè)置確定按鈕被點(diǎn)擊后,向外界提供監(jiān)聽
            @Override
            public void onClick(View view) {
                if (yesOnClickListener != null){
                    yesOnClickListener.onYesClick();
                    dismiss();
                }
            }
        });
    }
    //從外界Activity為Dialog設(shè)置標(biāo)題
    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);
        //去掉默認(rèn)的標(biāo)題欄
        requestWindowFeature(Window.FEATURE_NO_TITLE);
    }

}

③MainActivity代碼 完全自定義對(duì)話框方法:

//完全自定義對(duì)話框
    private void all_custom_dialog() {
        //創(chuàng)建對(duì)象
        MyDialog myDialog = new MyDialog(this);
        myDialog.setTitle("worning");       //設(shè)置標(biāo)題
        myDialog.setMessageStr("訪問風(fēng)險(xiǎn)"); //設(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();//顯示對(duì)話框
    }

共同學(xué)習(xí)??????

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

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

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