zoukankan      html  css  js  c++  java
  • ConfirmCancelBottomSheetDialog【确认取消底部对话框】

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

    前言

    继承BottomSheetDialog,实现简单的确认取消对话框样式。

    效果图

    代码分析

    ConfirmCancelBottomSheetDialog继承BottomSheetDialog

    使用步骤

    一、项目组织结构图

    注意事项:

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

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

    二、导入步骤

    在APP中的bundle.gradle文件中添加以下代码,引入design【版本号跟appcompat-v7的保持一致

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "com.why.project.confirmcancelbottomsheetdialogdemo"
            minSdkVersion 16
            targetSdkVersion 27
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support.constraint:constraint-layout:1.1.0'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    
        //BottomSheetDialog
        compile "com.android.support:design:27.1.1"
    }

    将ConfirmCancelBottomSheetDialog包复制到项目中【注意,需要手动打开Java文件重新import R文件】

    package com.why.project.confirmcancelbottomsheetdialogdemo.confirmcancel;
    
    import android.app.Activity;
    import android.content.Context;
    import android.content.res.Resources;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.design.widget.BottomSheetDialog;
    import android.util.DisplayMetrics;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import com.why.project.confirmcancelbottomsheetdialogdemo.R;
    
    
    /**
     * Used 底部弹出来的确认取消对话框【简约版的样式,只有标题、取消、确定两个按钮】
     */
    
    public class ConfirmCancelBottomSheetDialog extends BottomSheetDialog {
        private static final String TAG = ConfirmCancelBottomSheetDialog.class.getSimpleName();
    
        private Context mContext;
    
        /**设置对话框内容和样式的监听器(标题、按钮样式,包括控制隐藏)*/
        private DialogSetListener mDialogSetListener;
        /**三个按钮的点击事件监听器*/
        private DialogClickListener mDialogClickListener;
    
        private TextView mTitle;
        private TextView mLeftBtn;
        private TextView mRightBtn;
    
        public ConfirmCancelBottomSheetDialog(@NonNull Context context, DialogSetListener dialogSetListener) {
            super(context);
            mContext = context;
            mDialogSetListener = dialogSetListener;
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.dialog_bottomsheet_confirm_cancel);
    
            //可以变相实现底部外边距效果
            int screenHeight = getScreenHeight((Activity) mContext);
            int statusBarHeight = getStatusBarHeight(getContext());
            int dialogHeight = screenHeight;//
    //        getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, dialogHeight == 0 ? ViewGroup.LayoutParams.MATCH_PARENT : dialogHeight);
            getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);//红米6pro适配
            //设置透明
            getWindow().findViewById(R.id.design_bottom_sheet).setBackgroundResource(android.R.color.transparent);
    
            initViews();
            initEvents();
        }
    
        private static int getScreenHeight(Activity activity) {
            DisplayMetrics displaymetrics = new DisplayMetrics();
            activity.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
            return displaymetrics.heightPixels;
        }
    
        private static int getStatusBarHeight(Context context) {
            int statusBarHeight = 0;
            Resources res = context.getResources();
            int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");
            if (resourceId > 0) {
                statusBarHeight = res.getDimensionPixelSize(resourceId);
            }
            return statusBarHeight;
        }
    
        private void initViews() {
    
            mTitle = findViewById(R.id.confirm_title);
            mLeftBtn = findViewById(R.id.left_btn);
            mRightBtn = findViewById(R.id.right_btn);
    
            //==========================初始展现==========================
            if(mDialogSetListener != null){
                mDialogSetListener.setDialog(mTitle, mLeftBtn, mRightBtn);
            }
    
        }
    
        private void initEvents() {
            mLeftBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(mDialogClickListener != null){
                        mDialogClickListener.leftClickListener();
                    }
                    dismiss();
                }
            });
    
            mRightBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(mDialogClickListener != null){
                        mDialogClickListener.rightClickListener();
                    }
                    dismiss();
                }
            });
        }
    
        /**设置对话框内容和样式的监听器(标题、内容、按钮样式,包括控制隐藏)*/
        public static abstract interface DialogSetListener
        {
            /**设置标题、内容、按钮的文本以及按钮的显示隐藏
             * @param title - 标题控件【默认“提示”】
             * @param leftBtn - 左侧按钮控件【默认“确定”】
             * @param rightBtn - 右侧按钮控件【默认“取消”】*/
            public abstract void setDialog(TextView title, TextView leftBtn, TextView rightBtn);
        }
    
        public void setDialogSetListener(DialogSetListener dialogSetListener) {
            mDialogSetListener = dialogSetListener;
        }
    
        /**三个按钮的点击事件监听器*/
        public static abstract interface DialogClickListener
        {
            /**取消按钮*/
            public abstract void leftClickListener();
            /**确定按钮*/
            public abstract void rightClickListener();
        }
    
        public void setDialogClickListener(DialogClickListener dialogClickListener) {
            mDialogClickListener = dialogClickListener;
        }
    }
    ConfirmCancelBottomSheetDialog.java

    将confirm_cancel_bottomsheet_btn_bg.xml文件复制到res/drawable目录中

     

    将dialog_bottomsheet_confirm_cancel.xml文件复制到res/layout目录中

    至此,ConfirmCancelBottomSheetDialog就可以使用了。

    三、使用方法

    package com.why.project.confirmcancelbottomsheetdialogdemo;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.why.project.confirmcancelbottomsheetdialogdemo.confirmcancel.ConfirmCancelBottomSheetDialog;
    
    public class MainActivity extends AppCompatActivity {
    
        private Button btn_open;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initViews();
            initEvents();
        }
    
        private void initViews() {
            btn_open = findViewById(R.id.btn_open);
        }
    
        private void initEvents() {
            btn_open.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ConfirmCancelBottomSheetDialog delDialog = new ConfirmCancelBottomSheetDialog(MainActivity.this, new ConfirmCancelBottomSheetDialog.DialogSetListener() {
                        @Override
                        public void setDialog(TextView title, TextView leftBtn, TextView rightBtn) {
                            title.setText("是否删除?");
                        }
                    });
    
                    delDialog.setDialogClickListener(new ConfirmCancelBottomSheetDialog.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();
                        }
                    });
    
                    delDialog.show();
                }
            });
        }
    }

    混淆配置

    参考资料

    暂时空缺

    项目demo下载地址

    https://github.com/haiyuKing/ConfirmCancelBottomSheetDialogDemo

  • 相关阅读:
    Delphi管理多线程之线程局部存储:threadvar
    Delphi多线程编程--线程同步的方法(事件、互斥、信号、计时器)简介
    Delphi线程同步(临界区、互斥、信号量)
    Delphi多线程的OnTerminate属性(附加一个关于临界区线程同步的例子)
    Delphi中怎么结束线程(这个线程是定时执行的)(方案二)
    Delphi中怎么结束线程(这个线程是定时执行的)(方案一)
    Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
    Docker数据卷
    Docker获取镜像以及相关指令
    Docker安装
  • 原文地址:https://www.cnblogs.com/whycxb/p/9151685.html
Copyright © 2011-2022 走看看