博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ConfirmCancelUtilDialog【确认取消对话框封装类】
阅读量:7211 次
发布时间:2019-06-29

本文共 12089 字,大约阅读时间需要 40 分钟。

版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

对确认取消对话框的封装。

前提:调用对话框的Activity必须继承FragmentActivity及其子类(比如AppCompatActivity)。

效果图

代码分析

ConfirmCancelUtilDialog继承DialogFragment;

默认展现左侧、右侧两个按钮,通过DialogSetListener控制按钮的隐藏【比如,如果想要展现一个按钮,那么需要手动将其他一个按钮隐藏】;

通过DialogClickListener实现左侧、右侧按钮的监听事件。

实现了点击空白区域隐藏对话框的功能。

使用步骤

一、项目组织结构图

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

将ConfirmCancelUtilDialog.java文件复制到项目中

package com.why.project.confirmcanceldialogutildemo.dialog;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.os.Bundle;import android.support.v4.app.DialogFragment;import android.support.v4.content.ContextCompat;import android.util.DisplayMetrics;import android.util.Log;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.Button;import android.widget.TextView;import com.why.project.confirmcanceldialogutildemo.R;/** * Created by HaiyuKing * Used 确认取消对话框样式【含有标题、左右按钮(同时适用于一个按钮)】 */public class ConfirmCancelUtilDialog extends DialogFragment {    private static final String TAG = ConfirmCancelUtilDialog.class.getSimpleName();    /**View实例*/    private View myView;    /**context实例*/    private Context mContext;    /**标记:用来代表是从哪个界面打开的这个对话框*/    private String mTag;    /**设置对话框内容和样式的监听器(标题、内容、按钮样式,包括控制隐藏)*/    private DialogSetListener mDialogSetListener;    /**三个按钮的点击事件监听器*/    private DialogClickListener mDialogClickListener;    public static ConfirmCancelUtilDialog getInstance(Context mContext, DialogSetListener mDialogSetListener){        ConfirmCancelUtilDialog dialog = new ConfirmCancelUtilDialog();        dialog.mContext = mContext;        dialog.mDialogSetListener = mDialogSetListener;        return dialog;    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0));//设置对话框布局区域的背景为透明,并且没有标题        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏        myView = inflater.inflate(R.layout.dialog_confirm_cancel_util, container, false);        return myView;    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onActivityCreated(savedInstanceState);        //初始化控件以及设置初始数据和监听事件        initView();    }    /**     * 设置宽度和高度值,以及打开的动画效果     */    @Override    public void onStart() {        super.onStart();        //设置对话框的宽高,必须在onStart中        DisplayMetrics metrics = new DisplayMetrics();        this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);        Window window = this.getDialog().getWindow();        window.setLayout(metrics.widthPixels, this.getDialog().getWindow().getAttributes().height);//这样才能实现点击空白区域自动隐藏对话框        //window.setLayout(metrics.widthPixels, metrics.heightPixels - getStatusBarHeight(mContext));//这样可以实现点击空白区域无法隐藏对话框的功能        window.setGravity(Gravity.CENTER);//设置在中间        //打开的动画效果    }    /**获取状态栏的高度*/    private int getStatusBarHeight(Context context) {        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");        return context.getResources().getDimensionPixelSize(resourceId);    }    /**实例化控件*/    @SuppressWarnings("deprecation")    private void initView() {        TextView title = (TextView)myView.findViewById(R.id.title);//标题        TextView titleDelever = (TextView)myView.findViewById(R.id.delever_up_message);//标题        TextView message = (TextView)myView.findViewById(R.id.message);//内容        Button leftBtn = (Button)myView.findViewById(R.id.cancelBtn);//左侧按钮        Button rightBtn = (Button)myView.findViewById(R.id.confirmBtn);//右侧按钮        //==========================初始展现==========================        if(mDialogSetListener != null){            mDialogSetListener.setDialog(title, message, leftBtn, rightBtn);        }        //如果标题不存在,则隐藏标题下方的横线        if(title.getVisibility() == View.GONE){            titleDelever.setVisibility(View.GONE);        }        //如果左侧按钮不存在,则右侧按钮占满并且底色为蓝色、文字颜色为白色        if(leftBtn.getVisibility() == View.GONE) {            rightBtn.setBackgroundDrawable(ContextCompat.getDrawable(mContext,R.drawable.dialog_confirm_cancel_util_center_btn_bg));            rightBtn.setTextColor(mContext.getResources().getColor(R.color.confirm_cancel_util_dialog_btn_right_text_color));        }        //如果右侧按钮不存在,则左侧按钮占满并且底色为蓝色、文字颜色为白色        if(rightBtn.getVisibility() == View.GONE) {            leftBtn.setBackgroundDrawable(ContextCompat.getDrawable(mContext,R.drawable.dialog_confirm_cancel_util_center_btn_bg));            leftBtn.setTextColor(mContext.getResources().getColor(R.color.confirm_cancel_util_dialog_btn_right_text_color));        }        mTag = this.getTag();        Log.e(TAG, "mTag====="+mTag);        //==========================初始化监听事件==========================        leftBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if(mDialogClickListener != null){                    mDialogClickListener.leftClickListener();                }                dismiss();//关闭对话框,自动执行onDismiss中的方法            }        });        rightBtn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                if(mDialogClickListener != null){                    mDialogClickListener.rightClickListener();                }                dismiss();//关闭对话框,自动执行onDismiss中的方法            }        });    }    /**设置对话框内容和样式的监听器(标题、内容、按钮样式,包括控制隐藏)*/    public static abstract interface DialogSetListener    {        /**设置标题、内容、按钮的文本以及按钮的显示隐藏         * @param title - 标题控件【默认“提示”】         * @param message - 内容控件【默认空白】         * @param leftBtn - 左侧按钮控件【默认“取消”】         * @param rightBtn - 右侧按钮控件【默认“确定”】*/        public abstract void setDialog(TextView title, TextView message, Button leftBtn, Button rightBtn);    }    /**三个按钮的点击事件监听器*/    public static abstract interface DialogClickListener    {        /**左侧按钮*/        public abstract void leftClickListener();        /**右侧按钮*/        public abstract void rightClickListener();    }    public void setDialogClickListener(DialogClickListener dialogClickListener) {        mDialogClickListener = dialogClickListener;    }}
ConfirmCancelUtilDialog.java

将布局文件dialog_confirm_cancel_util.xml复制到项目的res/layout目录中

dialog_confirm_cancel_util.xml

将drawable目录中的文件复制到项目中

在colors.xml文件中添加以下代码

#3F51B5
#303F9F
#FF4081
#7fbfbfbf
#ffffffff
#4065EF
#4065EF
#6A6A6A
#4065EF
#ffffff
#ffffff
#000000

在dimens.xml文件中添加以下代码

16dp
16dp
5dp
40dp
10dp
18sp
1dp
25dp
16sp
16sp

在strings.xml文件中添加以下代码

ConfirmCancelDialogUtilDemo
提示
确定
取消

三、使用方法

只展现一个确定按钮

btn_confirm.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ConfirmCancelUtilDialog dialog = ConfirmCancelUtilDialog.getInstance(MainActivity.this,                        new ConfirmCancelUtilDialog.DialogSetListener() {                            @Override                            public void setDialog(TextView title, TextView message, Button leftBtn, Button rightBtn) {                                title.setText("提示");                                message.setText("请检查用户名");                                leftBtn.setText("确定");                                rightBtn.setVisibility(View.GONE);                            }                        });                dialog.setDialogClickListener(new ConfirmCancelUtilDialog.DialogClickListener() {                    @Override                    public void leftClickListener() {                        Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();                    }                    @Override                    public void rightClickListener() {                    }                });                dialog.show(getSupportFragmentManager(), "confirmCancelDialog");            }        });

展现确定和取消两个按钮

btn_confirmcancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ConfirmCancelUtilDialog dialog = ConfirmCancelUtilDialog.getInstance(MainActivity.this,                        new ConfirmCancelUtilDialog.DialogSetListener() {                            @Override                            public void setDialog(TextView title, TextView message, Button leftBtn, Button rightBtn) {                                title.setText("保存到");                                message.setText("您可以'立即发送'给收件人,也可以保存到'草稿箱'");                                leftBtn.setText("草稿箱");                                rightBtn.setText("立即发送");                            }                        });                dialog.setDialogClickListener(new ConfirmCancelUtilDialog.DialogClickListener() {                    @Override                    public void leftClickListener() {                        Toast.makeText(MainActivity.this, "草稿箱", Toast.LENGTH_SHORT).show();                    }                    @Override                    public void rightClickListener() {                        Toast.makeText(MainActivity.this, "立即发送", Toast.LENGTH_SHORT).show();                    }                });                dialog.show(getSupportFragmentManager(), "confirmCancelDialog");            }        });

 

展现没有标题的对话框

btn_notitle.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                ConfirmCancelUtilDialog dialog = ConfirmCancelUtilDialog.getInstance(MainActivity.this,                        new ConfirmCancelUtilDialog.DialogSetListener() {                            @Override                            public void setDialog(TextView title, TextView message, Button leftBtn, Button rightBtn) {                                title.setVisibility(View.GONE);                                message.setText("发现新版本,是否升级?");                                message.setGravity(Gravity.CENTER);                                leftBtn.setText("取消");                                rightBtn.setText("确定");                            }                        });                dialog.setDialogClickListener(new ConfirmCancelUtilDialog.DialogClickListener() {                    @Override                    public void leftClickListener() {                        Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();                    }                    @Override                    public void rightClickListener() {                        Toast.makeText(MainActivity.this, "确定", Toast.LENGTH_SHORT).show();                    }                });                dialog.show(getSupportFragmentManager(), "confirmCancelDialog");            }        });

混淆配置

参考资料

暂时空缺

项目demo下载地址

 

你可能感兴趣的文章
IOS开发之OC-Switf 混编 -(OC 引 Swift 文件)
查看>>
JAVA并发之多线程基础(2)
查看>>
服务器返回的常见的http状态码
查看>>
HASHMAP(JDK1.7)最详细原理分析(二)
查看>>
string数组怎么定义
查看>>
我的关于前端一些知识点的理解《一》
查看>>
Asynctask源码分析
查看>>
Promise基础用法
查看>>
[译] Spring 的分布式事务实现-使用和不使用XA — 第三部分
查看>>
区块链软件公司:创新的区块链技术如何改变法律行业的面貌
查看>>
一张时序图让你看懂:脏读、不可重复读
查看>>
js创建对象的几种方法
查看>>
浮点数杂想
查看>>
摧枯拉朽,说说ES6的三把火
查看>>
Java/Android基础-02
查看>>
nginx代理响应报文体不全解决思路
查看>>
前端性能优化 —— 项目瘦身
查看>>
全球人形机器人接连突破 拟人度越来越高
查看>>
vue按需加载
查看>>
创成汇2019年参加创新创业大赛都能获得什么?
查看>>