版权声明:本文为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

ConfirmCancelBottomSheetDialog【确认取消底部对话框】的更多相关文章

  1. ConfirmCancelUtilDialog【确认取消对话框封装类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 对确认取消对话框的封装. 前提:调用对话框的Activity必须继承FragmentActivity及其子类(比如AppCompat ...

  2. ConfirmCancelDialog【确认取消对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 对确认取消对话框的封装. 前提:调用对话框的Activity必须继承FragmentActivity及其子类(比如AppCompat ...

  3. AlertConfirmDialog【基于AlertDialog的确认取消对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 确认取消对话框,基于AlertDialog.不是基于DialogFragment. 按钮文本可以根据实际情况更换. 效果图 代码分析 ...

  4. javaScript 删除事件 弹出确认 取消对话框

    javaScript 删除事件 弹出确认 取消对话框 1. <a href="javascript:if(confirm('确实要删除?'))location='http://www. ...

  5. Selenium系列(九) - 针对alert窗口的处理(警告框、确认框、对话框)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...

  6. ThinkPHP第二十一天(JQuery元素获取,parents属性,toggle方法,确认弹出对话框使用)

    1.JQuery用法 A:$(function(){code...});表示当页面载入完毕后执行 B:获取元素方法:根据class名称 $('.classname'),根据ID名称 $('#IDnam ...

  7. NewBuiltBottomSheetDialog【新建底部对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 演示在底部选项卡上方弹出底部对话框效果. 效果图 代码分析 NewBuiltBottomSheetDialog继承BottomShe ...

  8. js 弹出确认 取消对话框

    一种: <a href="javascript:if(confirm('确实要删除该内容吗?')){location='http://www.google.com'}"> ...

  9. javascript window.confirm确认 取消对话框实现代码小结

    本文章讲述的三种都是基于了javascript confirm提示确认框的做法了,只是在不同的地方写哦,有需要的同学可参考一下   confirm() 方法 confirm() 方法用于显示一个带有指 ...

随机推荐

  1. SourceTree安装跳过注册

    问题描述 SourceTree是一个可视化管理版本文件的工具,但是注册的时候需要打开外国的网站. 因此要安装时需要绕过这一步才能使用. 解决方案 1. 在下面路径下创建一个accounts.json文 ...

  2. Java Script 读书笔记 (四) 面向对象编程

    1. 对象,属性 前面看到对象里删除属性一直疑惑,什么是对象,为什么属性可以删除, 我印象里的属性还是停留在property, 总想不明白为什么属性竟然能够删除.直到看到标准库才明白,原来对象就是py ...

  3. 时序数据库InfluxDB使用详解

    1 安装配置 这里说一下使用docker容器运行influxdb的步骤,物理机安装请参照官方文档.拉取镜像文件后运行即可,当前最新版本是1.3.5.启动容器时设置挂载的数据目录和开放端口.Influx ...

  4. Java并发编程(五)锁的使用(下)

    显式锁 上篇讲了使用synchronized关键字来定义锁,其实Java除了使用这个关键字外还可以使用Lock接口及其实现的子类来定义锁,ReentrantLock类是Lock接口的一个实现,Reen ...

  5. Applet 应用程序进行数字签名,对系统文件进行读写操作

    转:http://www.iteye.com/topic/154531 最近在研究applet,打算使用applet来开发一个上传文件上传控件,之前因为一直觉得applet的沙箱控制导致applet不 ...

  6. windows 7安装Fiddler抓HTTPS请求的解决办法

    一.下载安装Fiddler,网上随意一搜就可找到安装软件 二.打开已经安装的fiddler,本人的安装目录:D:\AutoTest\fiddle\Fiddler2 三.打开的页面如图: 三.点击too ...

  7. java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava

    搭建spring cloud的时候,报以下错误: java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplica ...

  8. esxi存储(外部共享存储)

    vSphere 基础物理架构中存储是一个非常关键的部分,没有好的存储,虚拟化也就没有存在的价值,并且它能够决定其系统性能的高低和如vMotion等高级功能能否实现.所以本次重点介绍vSphere中的存 ...

  9. UML用法及状态图,活动图介绍

    统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制 ...

  10. netty 之 telnet HelloWorld 详解

    前言 Netty是 一个异步事件驱动的网络应用程序框架, 用于快速开发可维护的高性能协议服务器和客户端. etty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序.它极 ...