让你的Dialog变得更简洁一点吧
时间:2022-06-06
本文章向大家介绍让你的Dialog变得更简洁一点吧,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
用Builder模式重新打造一个dialog,案例中有两种Builder,分别是CommonBuilder和MDBuilder,如果还想实现其他的通用,继承自FRBaseDialogBuilder即可。
1、下载
Gradle:
1repositories {
2 jcenter()
3}
4
5dependencies {
6 compile 'com.jack.frdialog:FRDialog:1.0.1'
7}
2、使用案例
2.1、普通Dialog
1private void showCommonDialog() {
2 final FRDialog dialog = new FRDialog.CommonBuilder(this)
3 .setContentView(R.layout.dialog_common)
4 .setText(R.id.dcu_tv_cancel, "否")
5 .setText(R.id.dcu_tv_confirm, "是")
6 .setText(R.id.dcu_tv_title, "温馨提示")
7 .setText(R.id.dcu_tv_content, "1.文字文字我是文字文字文字我是文字文字文字我是文字!n2.文字文字文字文字文字n3.文字文字文字文字文字")
8 .setDefaultAnim()
9 .show();
10
11 dialog.setText(R.id.dcu_tv_confirm, "确定");
12
13 dialog.setOnClickListener(R.id.dcu_tv_cancel, new FRDialogClickListener() {
14 @Override
15 public boolean onDialogClick(View view) {
16 Toast.makeText(MainActivity.this, "点击了否", Toast.LENGTH_SHORT).show();
17 return true;
18 }
19 });
20
21 dialog.setOnClickListener(R.id.dcu_tv_confirm, new FRDialogClickListener() {
22 @Override
23 public boolean onDialogClick(View v) {
24 Toast.makeText(MainActivity.this, "点击了是", Toast.LENGTH_SHORT).show();
25 return false;
26 }
27 });
28}
普通dialog
2.2、MaterialDesign Dialog
1private void showMDDialog() {
2 FRDialog dialog = new FRDialog.MDBuilder(this)
3 .setMessage("1.文字文字我是文字文字!n2.文字文字文字文字文字n3.文字文字文字文字文字")
4 .setTitle("温馨提示")
5 .setNegativeContentAndListener("否", null)
6 .setNegativeTextColor(ContextCompat.getColor(this,R.color.c999999))
7 .setPositiveTextColor(ContextCompat.getColor(this,R.color.colorPrimary))
8 .setPositiveContentAndListener("是", new FRDialogClickListener() {
9 @Override
10 public boolean onDialogClick(View view) {
11 return true;
12 }
13 }).show();
14}
MD效果的dialog
从底部弹出的dialog
3、特殊设置:
继承所有dialog的设置,同时还可以自定义以下设置
1//设置宽度全屏
2dialog.setFullWidth()
3
4//设置从底部弹出
5dialog.setFromBottom()
6
7//设置弹出动画
8dialog.setAnimation(int anim)
2018.5.24日更新
将mWidth改成mWidthOffset,不让用户设置一个具体的宽度,而是让用户去设置一个宽度比例,然后通过改变window的LayoutParams来设置dialog的宽高:
1WindowManager.LayoutParams lp = window.getAttributes();
2lp.width = (int) (baseBuilder.mContext.getResources().getDisplayMetrics().widthPixels * baseBuilder.mWidthOffset);
3lp.height = baseBuilder.mHeight;
4window.setAttributes(lp);
用法还是和之前一样:
1dialog.setWidthOffset(0——1) 默认是0.9
2018.7.19日更新
新增点击dialog中非EditText区域隐藏软键盘
1重写dispatchTouchEvent方法进行拦截:
2
3/**
4 * 点击dialog中除EditText以外的区域隐藏软键盘
5 *
6 * @param ev
7 * @return
8 */
9@Override
10public boolean dispatchTouchEvent(@NonNull MotionEvent ev) {
11 FRInputMethodManager.autoHideSoftInput(this, ev);
12 return super.dispatchTouchEvent(ev);
13}
14
15//核心方法
16public static boolean isAutoHideSoftInput(View view, MotionEvent event) {
17 if (event.getAction() != MotionEvent.ACTION_DOWN) {
18 return false;
19 }
20
21 if (!(view instanceof EditText)) {
22 return false;
23 }
24
25 float x = event.getX();
26 float y = event.getY();
27
28 int[] location = {0, 0};
29 view.getLocationInWindow(location);
30 int left = location[0];
31 int top = location[1];
32 int bottom = top + view.getHeight();
33 int right = left + view.getWidth();
34 if (left <= x && x < right && top <= y && y < bottom) {
35 // 点击事件在EditText的区域里
36 return false;
37 }
38
39 return true;
40}
用法不变。
- lodash源码分析之缓存方式的选择
- 《物联网智能终端信息安全白皮书》发布
- SemCmsv2_4 Function_php文件过滤不严导致Sql注入
- Python为什么这么火?聆听Python之父诠释Python的精神和文化
- 阿里程序员2017年终总结:web前端最有效学习方法!让你少走弯路
- 《关于深化“互联网+先进制造业”发展工业互联网的指导意见》的系列解读 解读二:打造平台体系
- 2018最火的AI丶云计算丶大数据丶物联网丶量子计算五大热门之间的关系
- 人工智能或能帮助揭示永葆青春的秘密 寻减缓衰老药物
- 近百万的“荣耀”域名遭仲裁 两个终端的对决
- IT专业人员如何看待软件定义的数据中心市场
- 安正平:网络隐私保护不能止于关闭直播平台
- 摩拜与武汉地铁深度合作,网上买地铁票又多了一种渠道
- 从零推导神经网络之入门篇
- 支付宝红包到底是谁挣了?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 实现浏览器中的最大请求并发数控制
- 【漏洞复现】Weblogic漏洞搭建与复现:CVE-2018-2894 任意文件上传
- 终于把进程和线程学会了
- 对方向你转账60元--三角函数方法精确位的实现
- 牛客网-树的子结构
- 牛客网-删除链表中重复的节点
- 牛客网-包含min函数的栈
- 牛客网-反转链表
- 牛客网-替换空格
- 手把手教你破解文件密码、wifi密码、网页密码
- 如何安装 Elastic 栈中的 Logstash
- 你的GitHub项目被封存到北极了吗?
- Logstash: 如何创建可维护和可重用的 Logstash 管道
- 手把手教你微信好友头像形成指定的文字
- Logstash: 应用实践 - 装载 CSV 文档到 Elasticsearch