Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >让你的Dialog变得更简洁一点吧

让你的Dialog变得更简洁一点吧

原创
作者头像
用户2802329
修改于 2018-08-02 02:46:57
修改于 2018-08-02 02:46:57
4450
举报
文章被收录于专栏:Android先生Android先生

GitHub地址

用Builder模式重新打造一个dialog,案例中有两种Builder,分别是CommonBuilder和MDBuilder,如果还想实现其他的通用dialog,继承自FRBaseDialogBuilder即可。

1、用法:

1.1、普通Dialog
代码语言:txt
AI代码解释
复制
private void showCommonDialog() {
    final FRDialog dialog = new FRDialog.CommonBuilder(this)
            .setContentView(R.layout.dialog_common)
            .setText(R.id.dcu_tv_cancel, "否")
            .setText(R.id.dcu_tv_confirm, "是")
            .setText(R.id.dcu_tv_title, "温馨提示")
            .setText(R.id.dcu_tv_content, "1.文字文字我是文字文字文字我是文字文字文字我是文字!\n2.文字文字文字文字文字\n3.文字文字文字文字文字")
            .setDefaultAnim()
            .show();

    dialog.setText(R.id.dcu_tv_confirm, "确定");

    dialog.setOnClickListener(R.id.dcu_tv_cancel, new FRDialogClickListener() {
        @Override
        public boolean onDialogClick(View view) {
            Toast.makeText(MainActivity.this, "点击了否", Toast.LENGTH_SHORT).show();
            return true;
        }
    });

    dialog.setOnClickListener(R.id.dcu_tv_confirm, new FRDialogClickListener() {
        @Override
        public boolean onDialogClick(View v) {
            Toast.makeText(MainActivity.this, "点击了是", Toast.LENGTH_SHORT).show();
            return false;
        }
    });
}
普通dialog
普通dialog
1.2、MaterialDesign Dialog
代码语言:txt
AI代码解释
复制
private void showMDDialog() {
    FRDialog dialog = new FRDialog.MDBuilder(this)
            .setMessage("1.文字文字我是文字文字文字我是文字文字文字我是文字!\n2.文字文字文字文字文字\n3.文字文字文字文字文字")
            .setTitle("温馨提示")
            .setNegativeAndPositive("否", "是")
            .setPositiveListener(new FRDialogClickListener() {
                @Override
                public boolean onDialogClick(View view) {
                    return true;
                }
            }).show();
}
MD效果的dialog
MD效果的dialog
从底部弹出的dialog
从底部弹出的dialog

2、特殊设置:

继承所有dialog的设置,同时还可以自定义以下设置

代码语言:txt
AI代码解释
复制
//设置宽度全屏
dialog.setFullWidth()

//设置从底部弹出
dialog.setFromBottom()

//设置弹出动画
dialog.setAnimation(int anim)

2018.5.24日更新

将mWidth改成mWidthOffset,不让用户设置一个具体的宽度,而是让用户去设置一个宽度比例,然后通过改变window的LayoutParams来设置dialog的宽高:

代码语言:txt
AI代码解释
复制
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (int) (baseBuilder.mContext.getResources().getDisplayMetrics().widthPixels * baseBuilder.mWidthOffset);
lp.height = baseBuilder.mHeight;
window.setAttributes(lp);

用法还是和之前一样:

代码语言:txt
AI代码解释
复制
dialog.setWidthOffset(0——1)  默认是0.9

2018.7.19日更新

新增点击dialog中非EditText区域隐藏软键盘

代码语言:txt
AI代码解释
复制
重写dispatchTouchEvent方法进行拦截:

/**
 * 点击dialog中除EditText以外的区域隐藏软键盘
 *
 * @param ev
 * @return
 */
@Override
public boolean dispatchTouchEvent(@NonNull MotionEvent ev) {
    FRInputMethodManager.autoHideSoftInput(this, ev);
    return super.dispatchTouchEvent(ev);
}

//核心方法
public static boolean isAutoHideSoftInput(View view, MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_DOWN) {
        return false;
    }

    if (!(view instanceof EditText)) {
        return false;
    }

    float x = event.getX();
    float y = event.getY();

    int[] location = {0, 0};
    view.getLocationInWindow(location);
    int left = location[0];
    int top = location[1];
    int bottom = top + view.getHeight();
    int right = left + view.getWidth();
    if (left <= x && x < right && top <= y && y < bottom) {
        // 点击事件在EditText的区域里
        return false;
    }

    return true;
}

用法不变。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android事件分发原理分析
在Android中,触碰控件的时候回产生一个ACTION_DOWN事件并逐层向下传递,首先ACTION_DOWN回先从Activity的dispatchTouchEvent方法开始向下传递:
大大大大大先生
2018/09/04
1.3K0
Android事件分发原理分析
class和getClass()的区别
前几天做项目,觉得自己都开发一年多了,还没有自己封装的类,感觉真是白做了,再加上,看到自己的代码,我都不忍心看,有的时候,还需要自己去读自己写的代码,乱乱糟糟的,实在不忍心看,没办法,重现在开始吧,把自己需要的,都封装起来,用到什么的时候,在哪来用,方便,快捷
全栈程序员站长
2022/07/02
4320
android 自定义登陆对话框基类封装,且随着软键盘的弹起自动移动位置
像对话框这种常用的组件,用过一次最好做个封装。再次用到时就很简单啦。直接拿过来复用即可。
杨永贞
2020/12/01
7400
android 自定义登陆对话框基类封装,且随着软键盘的弹起自动移动位置
Android完美解析setContentView 你真的理解setContentView吗?「建议收藏」
说到Activity的setContentView,咱们直接找到一个Activity中的setContentView点进去看看!
全栈程序员站长
2022/09/13
1.6K0
Android Studio 知识储备 之 ✨-基础知识学习历程
所有的资源文件都会在R.java文件下生成对应的资源id,我们可以直接通过资源id访问到对应的资源。使用mipmap会在图片缩放在提供一定的性能优化,分辨率不同系统会根据屏幕分辨率来选择hdpi,mdpi,xmdpi,xxhdpi下的对应图片,所以你解压别人的apk可以看到上述目录同一名称的图片,在四个文件夹下都有,只是大小和像素不一样而已!当然,这也不是绝对的,比如我们把所有的图片都丢在了drawable-hdpi下的话,即使手机 本该加载ldpi文件夹下的图片资源,但是ldpi下没有,那么加载的还会是hdpi下的图片! 另外,还有一种情况:比如是hdpi,mdpi目录下有,ldpi下没有,那么会加载mdpi中的资源! 原则是使用最接近的密度级别!另外如果你想禁止Android不跟随屏幕密度加载不同文件夹的资源,只需在AndroidManifest.xml文件中添加android:anyDensity="false"字段即可!
呆呆敲代码的小Y
2021/08/12
6710
Android实现仿支付宝流水
今天给大家讲的是如何自定义下拉的ListView实现支付宝账单的效果,月份是需要悬浮的,然后没一个月归为一类,先看一个效果图吧。 场景:后台下发的数据就是一个List<对象>,考虑到实际情况,还需要做
xiangzhihong
2018/02/06
1.3K0
Android实现仿支付宝流水
Android常用对话框大全——Dialog「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137960.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/23
4.3K0
Android常用对话框大全——Dialog「建议收藏」
Android开发笔记(四十五)手势事件
基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发。返回true表示需要下发给下级视图,返回false表示不需要下发(交给自身的onTouchEvent处理)。但是否最终下发,还需根据onInterceptTouchEvent的拦截结果。 onInterceptTouchEvent : 判断当前容器是否需要拦截该事件。返回true表示予以拦截(交给自身的onTouchEvent处理)、不放给下级视图,返回false表示不拦截该事件。 onTouchEvent : 判断该事件是否处理完毕。返回true表示处理完毕,则无需处理上级视图的onTouchEvent,一路返回结束流程。返回false表示该事件未完成,则返回继续处理上级视图的onTouchEvent,然后再根据上级onTouchEvent的返回值判断是直接结束还是由再上级处理。
aqi00
2019/01/18
1.3K0
Android开发笔记(九十四)图片的基本加工
Android上的图形使用Drawable类,而位图管理则使用Bitmap类,java上与之对应的是awt包中的BufferedImage。Android开发中有需要对jpg、png文件进行加工的,都是操作Bitmap,下面是Bitmap类的常用方法说明: compress : 根据设定的位图格式与压缩质量,对图片进行压缩。 recycle : 回收位图对象资源。 createBitmap : 从源图片中裁剪一块位图区域。 createScaledBitmap : 根据设定的目标大小,对源图片进行缩放。 getByteCount : 获取位图的字节大小。 getWidth : 获取位图的宽度。 getHeight : 获取位图的高度。
aqi00
2019/01/18
7750
Android点击其他地方隐藏键盘
Android点击其他地方隐藏键盘 1.第一种:隐藏页面一进来EditText获取焦点就弹出软键盘 在oncreate()里调用如下方法即可 /** * 隐藏软键盘 */ private void hideSoftKeyBoard() { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
程序员飞飞
2020/02/27
3.3K0
Robotium DialogUtils「建议收藏」
package com.robotium.solo; import android.app.Activity; import android.content.Context; import android.os.SystemClock; import android.view.ContextThemeWrapper; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.widget.EditText;
全栈程序员站长
2022/09/16
2910
点击空白处隐藏软键盘
在点击Editext的时候安卓会弹出软键盘,在我们输入完后不点击软键盘的”完成”键的时候,软键盘有时候会一直停留在”界面”,甚至跳转到另一个”界面”上.这样体验上不是很好.所以点击非EditText区域上,让软键盘隐藏起来是一种可行的方案. 从别人的博客上看到的代码,摘录如下:
夏洛克的猫
2018/10/18
1.6K0
Android点击EditText文本框之外任何地方隐藏键盘的解决办法
1,实现方法一:通过给当前界面布局文件的父layout设置点击事件(相当于给整个Activity设置点击事件),在事件里进行键盘隐藏 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/traceroute_rootview" android:layout_width="fill_parent" android:layout_height="fi
庞小明
2018/03/07
1.6K0
Activity 事件分发
首先先判断当前事件是否是Down事件,如果是就调用onUserInteraction方法,如果不是就不会调用,所以Up,Move方法不会调用该方法。
Yif
2019/12/26
8820
【云+社区年度征文】探究 | 如何捕获一个 Activity页面上所有的点击行为
既然我要捕获点击事件,首先就想到的是通过事件分发机制,也就是在源头就去获取所有的触摸事件,然后对点击事件进行统计,干吧~
码上积木
2020/12/03
1.1K0
相关推荐
Android事件分发原理分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档