集成MVVM,模块解耦,RxJava,Okhttp,Retrofit,ARouter组件化开发的基础包,并添加的一些基础工具类以备使用

注:该基础项目可用于多人协作开发,配置统一,并且有相关示例,根据个人需要灵活删减

目录

一. 框架说明 2

1. 添加组件方式 2

二. 注意事项 2

1. RxBus使用规定 2

2. 获取图片验证码(图片流) 2

3. 请求权限(统一使用RxPermissions) 3

4. 文件下载 3

5. 图片压缩 4

6. 通用ShowDialog 4

7. 重点注意(不要修改组件包名) 5

8. 调用定位功能(高德) 5

9. 接口示例与要求 5

10. XML中常用转义字符 5

11. XML中ImageView与databinding(其他控件类是) 5

12. 5

13. 5

三. DEMO使用 5

1. 图片,视频,音频选择 5

2. 弹框使用 6

3. 滑动导航 7

4. 换肤功能 7

5. 二维码生成,识别 8

6. 图片预览 8

7. 支付组件 9

8. 地区,时间选择 10

9. 自定义控件组件 12

10. WebviewDemo 13

11. 多语言 13

12. 版本更新 15

13. 地图组件 15

  • 框架说明
  1. 添加组件方式

简单方式步骤:

  1. 直接复制一个组件 ( 直接复制work组件的,那里面没什么东西 )
  2. 修改包名( 记得不要把其他组件的给修改了 ),applicationId,***ModuleInit (改成你当前组件名称)
  3. 在base组件config-->ModuleLifecycleReflexs 中配置你组件的ModuleInit
  4. Build.gradle中配置你所需要的
  5. 有疑问请自己对比其他组件即可
  • 注意事项
  1. RxBus使用规定
  发送:
_Login _login=new _Login(1,"name","age");

RxBus.getDefault().post(_login);

     接收:

Disposable subscribe = RxBus.getDefault().toObservable(_Login.class)
                    .subscribe(new Consumer<_Login>() {
                        @Override
                        public void accept(_Login l) throws Exception {
                            //登录成功后重新刷新数据
                            initData();
                            //解除注册
                            RxSubscriptions.remove(subscribe);
                        }
                    });
            RxSubscriptions.add(subscribe);
  1. 获取图片验证码(图片流)

示例如下:

 

 

  1. 请求权限(统一使用RxPermissions)

示例如下:

RxPermissions rxPermissions=new RxPermissions(this);
        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
            rxPermissions.request(new String[]{"","",""}).subscribe(new Consumer<Boolean>() {
                @Override
                public void accept(Boolean aBoolean) throws Exception {
                    if(aBoolean){
                        //请求成功
                    }else{
                        Log.e("TAG>>>","request Permissions err");                        
                    }
                }
            });

 

 

  1. 文件下载
DownLoadManager.getInstance().load("文件下载地址", new ProgressCallBack<RequestBody>("文件存放路径", "文件名称") {
            @Override
            public void onStart() {
                super.onStart();
                Log.e("TAG>>>","开始下载");
            }

            @Override
            public void onSuccess(RequestBody requestBody) {
                Log.e("TAG>>>","下载完成");
            }

            @Override
            public void progress(long progress, long total) {
                Log.e("TAG>>>","下载进度");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("TAG>>>","下载失败");
            }
        });

 

  1. 图片压缩
 List<String> fileList=new ArrayList<>();
        fileList.add("/data/image1.png");
        fileList.add("/data/image2.png");
        ImageUtils.compressWithRx(fileList, new Observer() {
            @Override
            public void onSubscribe(Disposable d) {
                
            }

            @Override
            public void onNext(Object o) {
                File file= (File) o;
                Log.e("TAG>>>",""+file.getAbsolutePath());
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
  1. 通用ShowDialog

Activity 继承 BaseActivity  (如项目有特殊需求请修改基类showDialog()方法)

Fragment 继承 BaseFragment  (如项目有特殊需求请修改基类showDialog()方法)

在接口请求的时候调用showDialog(), 请求完成后调用dismissDialog()

 

 

  1. 重点注意(不要随意修改组件包名)

各组件的命名风格为:  com.face.*** ( 当前组件的实际功能 )

示例: 支付组件 com.face.payment  地图组件 com.face.map 主业务组件 com.face.main

已经有的组件请勿修改组件包名,appid ( 组件的包名并不影响你宿主所有功能的使用 )

 

  1. 网络访问与参数提交

module-->ui-->package-->XXXViewModel ( 其他组件里面也有 )

  1. 所有接口请明确请求参数,有多少个参数就写明多少参数,不推荐也不允许使用Map<String,String>方式,尽量要让下一个人一目了然。 ( 具体请查看截图 )
  2.  参数拦截 .addInterceptor(new BaseInterceptor(headers))//headers拦截-可以添加通用参数
  3. .addInterceptor(new CacheInterceptor(mContext))//cache拦截
  4. .addInterceptor(new ParamsInterceptor(mContext))//params拦截-可以添加通用参数
  5. 添加通用参数如header中Authorization, ( 具体请查看截图 )
  6. headers.put("Authorization", SPUtils.getInstance().getString(SPKeyGlobal.USER_SID));
  7. 添加通用参数如params中token ( 具体请查看截图 )

    

public interface DemoApiService {
    @GET("action/apiv2/banner?catalog=1")
    Observable<BaseResponse<LoginModel>> demoGet();

    @FormUrlEncoded
    @POST("action/apiv2/banner")
    Observable<BaseResponse<DemoEntity>> demoPost(@Field("catalog") String catalog);
}
LinkedHashMap datas = new LinkedHashMap();
        datas.put("username", userPhone.get());//账号
        datas.put("password", phoneYzm.get());//密码
        datas.put("code", igmYzm.get());//图形验证码数据
        RetrofitClient.getInstance().create(DemoApiService.class)
                .demoGet(datas)
                .compose(RxUtils.bindToLifecycle(getLifecycleProvider())) //请求与View周期同步
                .compose(RxUtils.schedulersTransformer()) //线程调度
                .compose(RxUtils.exceptionTransformer()) // 网络错误的异常转换, 这里可以换成自己的ExceptionHandle
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) {
                        showDialog();
                    }
                })
                .subscribe(new Consumer<BaseResponse<LoginModel>>() {
                    @Override
                    public void accept(BaseResponse<LoginModel> response) {
                        dismissDialog();
                        //清除列表
                        //请求成功
                        if (response.getCode() == 200) {
                            //采用ARouter+RxBus实现组件间通信
                            RxBus.getDefault().post(userInfoEntity);
                            //关闭页面
                            finish();
                        }
                        ToastUtils.showLong("" + response.getMessage());
                    }
                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable throwable) {
                        //请求刷新完成收回
                        dismissDialog();
                    }
                }, new Action() {
                    @Override
                    public void run() {
                        //请求刷新完成收回
                        dismissDialog();
                    }
                });

 

  1. XML中常用转义字符

示例如下 :

android:visibility="@{age &lt; 1 ? View.GONE : View.VISIBLE}"

 

XML

转义后

<

<

>

>

&

&

&apos

'

"

"

 

空格

 

  • 空格: (普通的英文半角空格但不换行)
  • 窄空格: 
  •  (中文全角空格 (一个中文宽度))
  •  (半个中文宽度,但两个空格比一个中文略大)
  •  (一个中文宽度,但用起来会比中文字宽一点点)
  • \u3000\u3000(首行缩进)
  • \u3000(全角空格(中文符号))
  • \u0020(半角空格(英文符号))
  • …(省略号)

 

  1. XML中ImageView与databinding(其他控件类是)

示例如下(记得在XML中导入   <import type="com.qs.user.R"/> ) :

如果有特殊需求你也可以使用image.ViewAdapter 类( 如:特殊形状的图片五角星等需要你自己去画 )去添加设置你需要的

 

  • DEMO使用
    (实际效果在Setting组件ui.demo中)
  1. 图片,视频,音频选择

根据自己项目需求,去配置就好(使用前请将其他无效代码移除)

base-->simple-->pictureselector-->PhotoMainActivity  (图片视频音频选择)

setting-->ui-->photoselect-->PhotoSelectActivity  (图片选择示例,已移除无效代码)

 

  1. 弹框使用

根据自己项目需求,去配置就好

base-->simple-->xpopupdemo-->XpopupMainActivity-->QuickStartDemo (第三方框架里面集成了多种弹窗,如特殊需求使用自定义即可)

 

main-->popupwindow--> 实际使用自定义
 

3. 滑动导航

根据自己项目需求,去配置就好 (支持多个滑动,也支持等宽)

base-->simple-->slidetab-->SlidingTabActivity (直接查看使用方式)

user-->ui-->task-->mytask-->MyTaskActivity (直接查看使用方式)

 

 

4. 换肤功能

根据自己项目需求,去配置就好

setting-->ui-->skin-->SkinActivity (直接查看使用方式)

其他肤色的安装包放置在setting-->assets-->skins中 (daytime.skin 为apk将后缀.apk改为.skin即可)
skins-->daytime.skin的安装包使用skin-demo生成打包成apk即可 (如果有多套肤色则将skin-demo复制多套如: skin-daytime , skin-night 放置在框架的根目录下即跟skin-demo同级)

 

 

 

  1. 二维码生成,识别

根据自己项目需求,去配置就好

base-->simple-->zxing-->ZXingActivity  (直接查看使用方式)

base-->simple-->zxing-->Generatectivity

  1. 图片预览

根据自己项目需求,去配置就好

base-->simple-->picturepreview-->PhotoPreviewActivity(直接查看使用方式)

 

  1. 支付组件

根据自己项目需求,去配置就好

payment-->ui-->DemoActivity (直接查看使用方式)

只需调整参数即可,其他已经配置好,

 

  1. 地区,时间选择

根据自己项目需求,去配置就好

base-->simple-->xpopupdemo-->XpopupMainActivity-->QuickStartDemo(直接查看使用方式)

效果

 

  1. 自定义控件组件

根据自己项目需求,去配置就好

widget-->WidgetActivity (直接查看使用方式,你在项目中需要的自定义控件也要放置在该组件中)

效果

 

  1. WebviewDemo

根据自己项目需求,去配置就好

setting-->ui-->agreement-->UserAgreementActivity(直接查看使用方式)

包含点击事件拦截

 

  1. 多语言

根据自己项目需求,去配置就好

User-->ui-->language-->LanguageActivity  (直接查看使用方式)

效果

 

 

使用方式 (其他具体请查看demo)

每个Activity必须继承BaseActivity , 如果特殊需求请在对应的Activity -->onCreate中调用

  LanguageUtil.switchLanguage(this); 在setContentView前面

 

添加其他语言

在LanguageUtil中添加对应的Value

在LanguageUtil中切换多语言

 

 

 

  1. 版本更新

根据自己项目需求,去配置就好

Setting-->ui-->demo-->DemoSimpleItemViewModel

效果

使用案例

 

  1. 地图组件

目前只支持高德,根据自己项目需求,去配置就好 ( 只需要在宿主里面配置实际Key就好 )

 

Map-->ui-->location-->LocationFragment (简单的定位功能,在其他组件里面引用Fragment)

Map-->ui-->looklocation-->LookLocationActivity

Map-->ui-->looklocation-->demo (里面已集成高德地图的demo, 单独组件运行可直接查看效果,已经配置key)

 

 

最后附上githup地址点我直达,CSDN下载点我直达

猜你喜欢

转载自blog.csdn.net/qq_35809640/article/details/88425563