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
ConfirmCancelBottomSheetDialog【确认取消底部对话框】的更多相关文章
- ConfirmCancelUtilDialog【确认取消对话框封装类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 对确认取消对话框的封装. 前提:调用对话框的Activity必须继承FragmentActivity及其子类(比如AppCompat ...
- ConfirmCancelDialog【确认取消对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 对确认取消对话框的封装. 前提:调用对话框的Activity必须继承FragmentActivity及其子类(比如AppCompat ...
- AlertConfirmDialog【基于AlertDialog的确认取消对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 确认取消对话框,基于AlertDialog.不是基于DialogFragment. 按钮文本可以根据实际情况更换. 效果图 代码分析 ...
- javaScript 删除事件 弹出确认 取消对话框
javaScript 删除事件 弹出确认 取消对话框 1. <a href="javascript:if(confirm('确实要删除?'))location='http://www. ...
- Selenium系列(九) - 针对alert窗口的处理(警告框、确认框、对话框)
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- ThinkPHP第二十一天(JQuery元素获取,parents属性,toggle方法,确认弹出对话框使用)
1.JQuery用法 A:$(function(){code...});表示当页面载入完毕后执行 B:获取元素方法:根据class名称 $('.classname'),根据ID名称 $('#IDnam ...
- NewBuiltBottomSheetDialog【新建底部对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 演示在底部选项卡上方弹出底部对话框效果. 效果图 代码分析 NewBuiltBottomSheetDialog继承BottomShe ...
- js 弹出确认 取消对话框
一种: <a href="javascript:if(confirm('确实要删除该内容吗?')){location='http://www.google.com'}"> ...
- javascript window.confirm确认 取消对话框实现代码小结
本文章讲述的三种都是基于了javascript confirm提示确认框的做法了,只是在不同的地方写哦,有需要的同学可参考一下 confirm() 方法 confirm() 方法用于显示一个带有指 ...
随机推荐
- 如何把word中的图片怎么导出来呢?
在办公使用word的过程中你可能经常会遇到这个问题:插入到word中的图片找不到导出来的方法,是不是很郁闷呢,别急,今天咱们研究一下把word中的图片导出来的方法(把"我的"变成你 ...
- bzoj3811 玛里苟斯
分三种情况讨论 k=1时,对于每一位而言,只要有一个数这一位是1,那么这个就有0.5的概率是1,选他就是1,不选就是0,有第二个的话,在第一个选或不选的前提下,也各有0.5的几率选或不选,0和1的概率 ...
- BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法
BZOJ_1009_[HNOI2008]GT考试_KMP+矩阵乘法 Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考 ...
- BZOJ_2743_[HEOI2012]采花_离线+树状数组
BZOJ_2743_[HEOI2012]采花_离线+树状数组 Description 萧芸斓是Z国的公主,平时的一大爱好是采花.今天天气晴朗,阳光明媚,公主清晨便去了皇宫中新建的花园采花 .花园足够大 ...
- Lucene 源码分析之倒排索引(二)
本文以及后面几篇文章将讲解如何定位 Lucene 中的倒排索引.内容很多,唯有静下心才能跟着思路遨游. 我们可以思考一下,哪个步骤与倒排索引有关,很容易想到检索文档一定是要查询倒排列表的,那么就从此处 ...
- 当需要向数据库插入空值时,sql语句的判断
方法如下: 1.int代表整形. 2.string 代表 字符型. 3.datetime ,日期类型判断如下 if(account.date!=Datetime.MinValue) { Str1.Ap ...
- 从壹开始前后端分离 39 || 想创建自己的dotnet模板么?看这里
缘起 开工是利啦!哈喽各位小伙伴,周三好呀,新的一年又开始了,老张给大家做个榜样,新的一年也要好好学习哟,这两天闲的无事就整理整理了这个系列的 Github 代码,增加了一个英文的 README ,然 ...
- Itest(爱测试),最懂测试人的开源测试管理软件隆重发布
测试人自己开发,汇聚10年沉淀,独创流程驱动测试.度量展现测试人价值的测试协同软件,开源免费 官网刚上线,近期发布源码:http://www.itest.work 在线体验 http://www. ...
- 玩转Spring Cloud之服务注册发现(eureka)及负载均衡消费(ribbon、feign)
如果说用Spring Boot+Spring MVC是开发单体应用(或单体服务)的利器,那么Spring Boot+Spring MVC+Spring Cloud将是开发分布式应用(快速构建微服务)的 ...
- 设计模式 | 策略模式(strategy)
参考:https://www.cnblogs.com/lewis0077/p/5133812.html(深入解析策略模式) 定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,使每个算法可以相 ...