您的位置:首页 > 移动开发 > Android开发

XDroid 轻量级的Android快速开发框架

2016-12-08 10:58 120 查看
https://github.com/limedroid/XDroid/wiki


概述

XDroid是一个轻量级的Android快速开发框架,由
UI
Cache
Event
ImageLoader
Kit
Log
Router
Net
等几个部分组成。其设计思想是使用接口对各模块解耦规范化,不强依赖某些明确的三方类库,使得三方类库可自由搭配组装,方便替换。可快速、自由的进行App开发。


特性

XDroid主要有这些特性:
基于MVC,可快速切换到MVP
提供XActivity、XFragment、SimpleRecAdapter、SimpleListAdapter等基类,可快速进行开发
完整封装XRecyclerView,可实现绝大部分需求
QTContentLayout、XRecyclerContentLayout实现loading、error、empty、content四种状态的自由切换
实现了Memory、Disk、SharedPreferences三种方式的缓存,可自由扩展
内置了EventBus,可自由切换到其他事件订阅库
内置Glide,可自由切换其他图片加载库
可输出漂亮的Log,支持Json、Xml、Throwable等,实现蝇量级
内置链式路由
内置常用工具类:package、random、file...,提供的都是非常常用的方法
内置加密工具类 XCodec,你想要的加密姿势都有
默认使用okhttputils作为api请求,可任性切换retrofit等其他库
引入三方库极少


Get
Started

使用,仅需三步:


step1

clone 'XDroid'库到本地:

git clone https://github.com/limedroid/XDroid.git[/code] 


step2

将library作为依赖库,在您的app module 中 添加如下依赖:

compile project(':library')



step3

修改
kit
包下的
XDroidConf
配置类,主要针对log、cache、router。若采用默认配置,此步骤可略过.


1
使用说明


1.1
UI规范

在UI层,主要对Activity、Fragment、RecyclerView、ListAdapter进行了封装。


1.1.1
XActivity

项目的Activity可直接继承
XActivity
,也可重新写一个基类Activity并让其继承XActivity,子类Activity必须实现这四个方法:

void initData(Bundle savedInstanceState);       //初始化数据

void setListener();                 //设置事件监听

int getLayoutId();                  //设置布局资源文件id

boolean useEventBus();              //是否使用eventbus


这些类的定义在
UiCallback
接口中,若要进行修改,可直接修改此类。 XActivity中还实现了
UiDelegate
,实现常用的公共方法,在子类中可直接使用。

可以将项目的showLoadingDialog()等常用方法添加进去,方便子类调用


1.1.2
XFragment

XFragment的实现与XActivity一致,为了方便的对Fragment和Activity进行切换,也就是只需要修改继承父类,就可改变Fragment&Activity的归属。其使用方法与XActivity是一致的。


1.1.3
UiDelegate

UiDelegate
是一个接口,封装了一些常见的公共方法,供
XActivity
XFragment
的子类使用,其定义如下:

public interface UiDelegate {

void resume();
void pause();
void destory();

void visible(boolean flag, View view);
void gone(boolean flag, View view);
void inVisible(View view);

void toastShort(String msg);
void toastLong(String msg);

}


XDroid中内置了
UiDelegateBase
实现类。


1.1.4
XRecyclerView

XDroid集成了XRecyclerViewXRecyclerView有该库的详细说明。这里列举说明如下:
XRecyclerView继承自RecyclerView,它就是一个封装了常见功能的RecyclerView,而不是继承FrameLayout
XRecyclerView中实现了Header、Footer,header和Footer可以有多个
XRecyclerView的每一个header、footer的viewType是不同的,而大部分开源库的header、footer的viewtype是相同的,其直接后果是界面卡顿
XRecyclerView可以做出几乎任何的界面效果,可以取代ScrollView,你只需要使用header或者footer
XRecyclerView中实现了上拉加载更多,可以自定义加载更多的效果,只需要实现LoadMoreUIHandler接口即可
XRecyclerView并未实现下拉刷新功能,您可以选择SwipeRefreshLayout或者其他的下拉刷新viewGroup包裹,即 你可以自由选择下拉刷新功能的实现。
为了方便自定义使用,特别集成了XRecyclerContentLayout控件,你可以根据业务进行扩展,XRecyclerContentLayout只是一个示例,当然也可以满足绝大部分需求了


1.1.5
SimpleRecAdapter&SimpleListAdapter

SimpleRecAdapter
是针对单ItemType场景对RecyclerView.Adapter的封装,只需要继承该类,实现三个方法即可:

F newViewHolder(View itemView);         //创建viewholder

int getLayoutId();              //设置布局资源id

void onBindViewHolder(F holder, int position);       //绑定数据和事件


若有多个ItemType,请继承RecyclerAdapter类,具体实现推荐看源码

SimpleListAdapter
是针对单ItemType场景对ListAdapter的封装,继承该类,也需要实现三个方法:

H newViewHolder(View convertView);      //创建viewholder

int getLayoutId();          //设置布局资源文件

void convert(H holder, T item, int position);       //绑定数据和事件


若有多个ItemType,请继承XListAdapter类


1.2
缓存

XDroid定义了
ICache
接口

public interface ICache {
void put(String key, Object value);         //存

Object get(String key);                     //取

void remove(String key);                    //删除

boolean contains(String key);               //检验是否存在

void clear();                               //删除所有

}


并实现了
DiskCache
MemoryCache
,其内部分别借助 
DiskLruCache
LruCache
实现。


1.2.1
SharedPreferences

SharedPref
是对SharedPreferences的封装,包含了一系列的
get
&
put
方法、
remove
等。
推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。如:

public String getUserName(){
return getString(KEY.USER_NAME , null);
}


可以在
XDroidConf
中配置缓存文件名称,默认是
config



1.2.2
MemoryCache

MemoryCache
内部采用
LruCache
实现,是
ICache
的实现类。
推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。


1.2.3
DiskCache

DiskCache
内部采用
DiskLruCache
实现,是文件缓存方式,其在基本缓存的基础上,增加了有效期,可以用于Api数据缓存。

void put(String key, String value);
void put(String key, String value, long expireMills);
String get(String key);
void remove(String key);
boolean contains(String key);
void clear();


实现了上述方法。

可以在
XDroidConf
中配置缓存目录名称,默认是
cache



1.2.4
自定义缓存

自定义缓存只需要实现
ICache
即可。


1.3
事件订阅

事件订阅,对应包
event


使用事件订阅,需要重写
XActivity
或者
XFragment
useEventBus
方法,当返回true时,表示使用事件订阅。

@Override
public boolean useEventBus() {
return false;
}



1.3.1
EventBus的使用

XDroid
中内置实现了
EventBus
,使用时只需要调用

BusFactory.getBus().register(this);


XActivity
&
XFragment
已经有默认实现,无需额外调用。

EventBus
使用最新的3.0,去了解详情EventBus

需要说明的是: 事件类需要实现
IEvent
接口

事件发送:

BusFactory.getBus().register(new MsgEvent());


MsgEvent implement IEvent


1.3.2
自定义事件订阅

自定义事件订阅只需要两步:

step1


实现
IBus
接口,并实现其四个方法:

@Override
public void register(Object object) {

}

@Override
public void unregister(Object object) {

}

@Override
public void post(IEvent event) {

}

@Override
public void postSticky(IEvent event) {

}



step2


修改
BusFactory
类的实现,将
EventBusImpl
的实现方案替换成您自己的事件订阅方案。

public static IBus getBus() {
if (bus == null) {
synchronized (ILFactory.class) {
if (bus == null) {
bus = new EventBusImpl();
}
}
}
return bus;
}



1.4
图片加载

图片加载对应包
imageloader


XDroid
内置了
glide
作为图片加载工具


1.4.1
Glide的使用

glide
的使用只需要调用:

ILFactory.getLoader().loadAssets(imageView,"",new ILoader.Options(loadingResId,errorResId));


其他方法可以查看源码.


1.4.2
图片加载扩展

自定义图片加载只需两步,不需要修改之前的调用代码。

ILoader
介绍


ILoader
是一个接口,定义如下:

public interface ILoader {

void init(Context context);     //图片加载框架初始化,通常在App->onCreate方法中调用

void loadNet(ImageView target, String url, Options options);        //加载网络资源
void loadResource(ImageView target, int resId, Options options);    //加载resource
void loadAssets(ImageView target, String assetName, Options options);   //加载asset
void loadFile(ImageView target, File file, Options options);        //加载file

void clearMemoryCache(Context context);         //clear内存缓存

void clearDiskCache(Context context);           //clear磁盘缓存
}


如果项目还有其他需求,可直接在这里进行扩展。

step1


新建一个图片加载控制器,并实现
ILoader
接口及其对应的几个方法。

step2


ILFactory
中修改
getLoader
的实现,替换成新的图片加载控制器

public static ILoader getLoader() {
if (loader == null) {
synchronized (ILFactory.class) {
if (loader == null) {
loader = new GlideLoader();
}
}
}
return loader;
}


不需要修改imageloader的调用


1.5
常用工具


1.5.1
加解密Codec


1.5.2
常用工具kits


1.5.3
单例基类SingletonCtx


1.5.4
简单回调SimpleCallback


1.6
日志


1.7
路由


1.8
Api请求


1.9
XDroid配置


1.10
混淆

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: