Skip to content

sHadowLess-LhQ/BasePopView

Repository files navigation

BasePopView

📐 软件架构

个人自用XPop封装基类(支持ViewBinding)

⚠️ 注意:layout的名称命名要规范,需要"_"分隔,不然无法通过名称拿到layout的id

例:xxx_xxx.xmlxxx_xxx_xxx_xxx.xml

💡 提示:懒,不想down大佬的源码去添加

🚀 安装教程

Step 1. 添加maven仓库地址和配置

旧Android Studio版本

编辑 build.gradle 文件:

allprojects {
    repositories {
       ...
       maven { url 'https://jitpack.io' }
    }
}

新Android Studio版本

编辑 settings.gradle 文件:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
       ...
       maven { url 'https://jitpack.io' }
    }
}

配置ViewBinding

在主项目的 build.gradle 中加入:

新Android Studio版本

android {
    ...
    buildFeatures {
        viewBinding true
    }
}

旧Android Studio版本

android {
    ...
    viewBinding {
        enable = true
    }
}

Step 2. 添加依赖

a. 克隆引入

直接下载源码引入model

b. 远程仓库引入

dependencies {
    implementation 'com.github.sHadowLess-LhQ:BasePopView:Tag'
    implementation 'com.github.li-xiaojun:XPopup:2.10.0'
}

c. 混淆规则

-dontwarn com.lxj.xpopup.widget.**
-keep class com.lxj.xpopup.widget.**{*;}
-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}
-keep class android.support.**{*;}

📖 使用说明

// 创建xml后,点击编译,填入需要绑定的视图
// 支持ViewBinding
// click监听已做快速点击处理,请实现antiShakingClick接口方法
// 如果单个Pop需要动态使用不同的布局文件,请给Base*的泛型类型
// 传递ViewBinding,并重写setBindViewClass模板方法,传递不同ViewBinding类
// 如果不想用默认的反射去动态使用不同的布局,请重写inflateView模板方法
// 手动传递和实现ViewBinding类的实例
// 如果有反射加载视图慢的情况,请重写inflateView方法,手动实现ViewBinding类创建
// 需要更改点击防抖时间阈值,请重写isFastClick,在超类调用传递时间
// 共有9种基类封装弹窗
// BaseBottomPopView - 底部弹出弹窗
// BaseBubbleHorizontalAttachPopupView - 水平弹出可依附气泡弹窗
// BaseCenterPopView - 居中弹窗
// BaseDrawerPopupView - 实现Drawer的弹窗
// BaseFullScreenPopupView - 全屏弹窗
// BaseHorizontalAttachPopView - 水平弹出可依附视图弹窗
// BasePositionPopupView - 自定义方向弹窗
// BaseVerticalAttachPopView - 垂直弹出可依附视图弹窗
// BaseVerticalBubbleAttachPopupView - 垂直弹出可依附气泡弹窗
// 【注】:内部使用Fragment,需要设置isViewMode为true
// 继承示例
public class TestPopView extends BaseCenterPopView<ViewBinding>{

    public TestPopView(@NonNull Context context) {
       super(context);
    }
     
    @Override
    public ViewBinding inflateView() {
       //可重写后实现视图初始化
       return super.inflateView();
    }
    
    @Override
    public boolean isDefaultBackground() {
       //是否使用内置默认背景
       //不使用弹窗背景为透明
       return false;
    }
    
    @Override
    public void initObject() {
       //初始化对象
    }
    
    @Override
    public void initView() {
       //初始化视图
    }
    
    @Override
    public void initViewListener() {
       //初始化视图事件
    }
    
    @Override
    public void initDataListener() {
       //初始化数据事件
    }
    
    @Override
    public void initData() {
       //初始化数据
    }
    
    @Override
    public void updateData() {
       //更新数据
       //用于全局pop或单例pop
       //更新所需数据使用
    }
    
    @Override
    public Class<ViewBinding> setBindViewClass() {
       //反射动态布局
        Class<?> cls;
        if (i == 1) {
           cls = ActivityMainBinding.class;
        } else {
           cls = XxxBinding.class;
        }
        return (Class<ViewBinding>) cls;
    }
 
    @Override
    public boolean isFastClick(int time) {
       //传递需要的防抖时间阈值 
       return super.isFastClick(time);
    }
    
    @Override
    public ViewBinding inflateView(Object o, View view) throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
       //手动动态布局或手动初始化布局
       int i = 0;
       if (i == 0){
           return TestBinding.inflate(getLayoutInflater());
       }
       return Test1Binding.inflate(getLayoutInflater());
    }
 
    @Override
    public void antiShakingClick(View v) {
       super.antiShakingClick(v);
       //点击事件
    }
}

About

🐱‍🏍Android个人自用XPop封装基类(支持ViewBinding)🐱‍🏍

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages