让你的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}

用法不变。

原文发布于微信公众号 - Android先生(cyg_24kshign)

原文发表时间:2018-07-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程之路

羊皮书APP(Android版)开发系列(十九)在ScrollView中使用ListView、GridView的方法

10020
来自专栏Android机动车

轻松实现右滑关闭当前Activity

常常可以看到,很多Android应用都有这么一个功能,就是滑动关闭Activity,比如微信,CSDN移动端,百度贴吧移动端等。我自己也想写个滑动关闭Activ...

11210
来自专栏移动开发

PopupWindow显示在某个控件上方

PopupWindow有一个显示在在某个上方的方法,但是没有定义一个在控件下方的方法,不知为何.这里提供一个小思路:

24320
来自专栏Android知识点总结

3-VIV-Android控件之ImageView

12620
来自专栏Jack的Android之旅

高仿支付宝9.9.2版本生活模块界面来讲解CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout

是不是很像支付宝的效果呢,我们今天就要通过讲解android5.0新出的控件CoordinatorLayout,AppBarLayout,CollapsingT...

20720
来自专栏肖蕾的博客

打造一个无数据显示无数据提示信息的ListView

12830
来自专栏开发之途

Android 仿微信底部渐变Tab

22630
来自专栏Java学习网

Android UI控件系列:TabWidget(切换卡)

Android UI控件系列:TabWidget(切换卡) Tab选项卡类似与电话本的界面,通过多个标签切换不同的内容,要实现这个效果,首先要知道TabHost...

30090
来自专栏向治洪

PullToRefreshScrollView 嵌套RecyclerView实现特卖列表倒计时抢购

不久之前,我们谈到了通过Handler与timer及TimerTask结合实现倒计时抢购列表,那个是PullToRefreshListView实现的,今天要讲的...

36250
来自专栏Android干货

关于安卓开发实现进度条对话框

56370

扫码关注云+社区

领取腾讯云代金券