Android 开发技术学习之Xpopup框架弹窗实现

XPopup

快捷键目录标题文本样式列表链接代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图
目录 复制

点击目录跳转到文章指定位置

  • XPopup
  • 效果演示
    • 内置和列表Center弹窗
    • Bottom列表(手势拖拽,横竖滚动) 和自定义Bottom(支持嵌套滚动,多层弹窗)
    • Attach(动画优雅,智能定位,长按) 和 自定义Attach任意方向
    • 自定义贴在输入法之上、类似QQ弹窗
    • PartShadow局部阴影、向上向下
  • 快速体验
  • 使用文档
  • 混淆
  • Activity中快速实现
    • 父类BaseActivity中实现接口
    • 子类ImplActivity调用接口
  • 总结

安卓自带弹窗 可以访问我的 另一篇文章

Android PopupWindow点击监听事件及DialogFragment、ProgressDialog、AlertDialog的使用

深度定制化开发采用Xpopup框架实现

设计思路

  • Center类型,就是在中间弹出的弹窗,比如确认和取消弹窗,Loading弹窗
  • Bottom类型,就是从页面底部弹出,比如从底部弹出的分享窗体,知乎的从底部弹出的评论列表,内部已经处理好手势拖拽和嵌套滚动
  • Attach类型,就是弹窗的位置需要依附于某个View或者某个触摸点,就像系统的PopupMenu效果一样,但PopupMenu的自定义性很差,淘宝的商品列表筛选的下拉弹窗,微信的朋友圈点赞弹窗都是这种。
  • DrawerLayout类型,就是从窗体的坐边或者右边弹出,并支持手势拖拽;好处是与界面解耦,可以在任何界面显示DrawerLayout
  • ImageViewer大图浏览类型,就像掘金那样的图片浏览弹窗,带有良好的拖拽交互体验,内部嵌入了改良的PhotoView
  • 全屏弹窗,弹窗是全屏的,就像Activity那样,可以设置任意的动画器;适合用来实现登录,选择性的界面效果。
  • Position自由定位弹窗,弹窗是自由的,你可放在屏幕左上角,右下角,或者任意地方,结合强大的动画器,可以实现各种效果。

效果演示

内置和列表Center弹窗

Android 开发技术学习之Xpopup框架弹窗实现_第1张图片|Android 开发技术学习之Xpopup框架弹窗实现_第2张图片

Bottom列表(手势拖拽,横竖滚动) 和自定义Bottom(支持嵌套滚动,多层弹窗)

|Android 开发技术学习之Xpopup框架弹窗实现_第3张图片

Attach(动画优雅,智能定位,长按) 和 自定义Attach任意方向

Android 开发技术学习之Xpopup框架弹窗实现_第4张图片|
Android 开发技术学习之Xpopup框架弹窗实现_第5张图片|Android 开发技术学习之Xpopup框架弹窗实现_第6张图片

自定义贴在输入法之上、类似QQ弹窗

Android 开发技术学习之Xpopup框架弹窗实现_第7张图片|Android 开发技术学习之Xpopup框架弹窗实现_第8张图片

PartShadow局部阴影、向上向下

Android 开发技术学习之Xpopup框架弹窗实现_第9张图片 | Android 开发技术学习之Xpopup框架弹窗实现_第10张图片

快速体验

Android 开发技术学习之Xpopup框架弹窗实现_第11张图片

如果二维码图片不可见,点我下载Demo体验

implementation 'com.lxj:xpopup:2.1.4'

必须添加的依赖库,版本不用和我一致:

	implementation "androidx.appcompat:appcompat:1.2.0"
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'com.android.support:design:28.0.0'

使用文档

具体使用方法全在WIKI中,请查看下面各个章节:

  • 如何使用内置的弹窗
  • 如何自定义弹窗
  • 如何自定义动画
  • 弹窗常用设置
  • 常见问题
  • 也许你想要这些效果
  • 一行代码在应用后台弹出弹窗
  • 时间选择器和城市选择器

混淆

-dontwarn com.lxj.xpopup.widget.**
-keep class com.lxj.xpopup.widget.**{*;}

Activity中快速实现

父类BaseActivity中实现接口

ConfirmPopupView popupView;

    protected void showXPopupView(String title, String content, String cancelBtnText, String confirmBtnText) {
        popupView = new XPopup.Builder(getContext())
                .setPopupCallback(new SimpleCallback() {
                    @Override
                    public void onCreated(BasePopupView pv) {
                        popupView.getContentTextView().setTextColor(Color.RED);

                        popupView.getConfirmTextView().setTextColor(Color.RED);
                    }

                    @Override
                    public void onShow(BasePopupView popupView) {
                        Log.e("tag", "onShow");
                    }

                    @Override
                    public void onDismiss(BasePopupView popupView) {
                        Log.e("tag", "onDismiss");
                    }

                    @Override
                    public void beforeDismiss(BasePopupView popupView) {
                    }

                    @Override
                    public boolean onBackPressed(BasePopupView popupView) {
                        return true;
                    }
                }).asConfirm(title, content,
                        cancelBtnText, confirmBtnText,
                        new OnConfirmListener() {
                            @Override
                            public void onConfirm() {
                                ToastUtil.showToastShort("click confirm");
                            }
                        }, null, false);
        popupView.show();
    }

子类ImplActivity调用接口

多个子类中调用示意:如图所示
Android 开发技术学习之Xpopup框架弹窗实现_第12张图片

    public void onPermissionDenied() {
        showXPopupView("权限未打开","只有打开定位权限才能正常使用配网功能","取消","我知道了");
    }

总结

Android 开发技术学习之Xpopup框架弹窗实现_第13张图片
快速实现参考我给出的方法,更多实现方案下载源码 点我下载

你可能感兴趣的:(Android,安卓,ui,app)