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

GitHub地址

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

1、用法:

1.1、普通Dialog

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

1.2、MaterialDesign Dialog

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
从底部弹出的dialog

2、特殊设置:

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

//设置宽度全屏
dialog.setFullWidth()

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

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

2018.5.24日更新

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

WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (int) (baseBuilder.mContext.getResources().getDisplayMetrics().widthPixels * baseBuilder.mWidthOffset);
lp.height = baseBuilder.mHeight;
window.setAttributes(lp);

用法还是和之前一样:

dialog.setWidthOffset(0——1)  默认是0.9

2018.7.19日更新

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

重写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;
}

用法不变。

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android相关

Android-LinearLayout中getChildMeasureSpec解析

该函数的注释是:执行最难的一步:测量子View大小,测量出指定的MeasureSpec 给一个单独的子View,这个方法要计算出子View正确的HeightMe...

20210
来自专栏郭霖

Android滑动菜单框架完全解析,教你如何一分钟实现滑动菜单特效

之前我向大家介绍了史上最简单的滑动菜单的实现方式,相信大家都还记得。如果忘记了其中的实现原理或者还没看过的朋友,请先去看一遍之前的文章 Android滑动菜单特...

35260
来自专栏Android开发指南

Android刮刮卡自定义控件

40290
来自专栏Android干货

安卓开发_慕课网_百度地图_刮刮涂层效果

377140
来自专栏Android干货

关于安卓开发实现侧滑菜单效果

1.1K80
来自专栏Android干货

安卓开发_浅谈Android动画(一)

29870
来自专栏开发之途

Android 仿微信底部渐变Tab

22630
来自专栏编程之路

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

10020
来自专栏向治洪

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

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

36250
来自专栏分享达人秀

ImageView的属性和方法大全

通过前面几期的学习,TextView控件及其子控件基本学习完成,可以在Android屏幕上显示一些文字或者按钮,那么从本期开始来学习如何进行图片展示,这...

21490

扫码关注云+社区

领取腾讯云代金券