-
Notifications
You must be signed in to change notification settings - Fork 11
Home
XDroid-Base包含了XDroid的基本功能,可作为一个简单的开发框架,包含开发中常用的一些快速开发类。
XDroid-Databinding主要有这些特性:
- 提供
SimpleRecAdapter、SimpleListAdapte、XRecyclerAdapter、XListAdapter等基类,可快速进行开发 - 实现了Memory、Disk、SharedPreferences三种方式的缓存,可自由扩展
- 内置
Glide,可自由切换其他图片加载库 - 可输出漂亮的
Log,支持Json、Xml、Throwable等,蝇量级实现 - 内置链式路由
- 内置
Toast工具类 - 内置常用工具类:
package、random、file...,提供的都是非常常用的方法 - 内置加密工具类
XCodec,你想要的加密姿势都有 - 引入三方库极少
clone 'XDroid-Base'库到本地:
git clone https://github.com/fodroid/XDroid-Base.git将xdroidbase作为依赖库,在您的app module 中 添加如下依赖:
compile project(':xdroidbase')拷贝conf.gradle到您的项目根目录,并修改项目gradle文件下引入:
apply from: "conf.gradle"并添加:
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}调用XDroidBaseConf配置类,主要针对log、cache、router、imageloader。若采用默认配置,此步骤可略过.
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}dependencies {
compile 'com.github.fodroid:XDroid-Base:v1.3'
}即只有一个viewType的Adapter,这时只需要继承
SimpleListAdapter
public class AListAdapter extends SimpleListAdapter<String, AListAdapter.ViewHolder> {
public AListAdapter(Context context) {
super(context);
}
@Override
protected ViewHolder newViewHolder(View convertView) {
return new ViewHolder(convertView);
}
@Override
protected int getLayoutId() {
return R.layout.item_single;
}
@Override
protected void onBindViewHolder(ViewHolder holder, String item, int position) {
}
public static class ViewHolder {
public ViewHolder(View convertView) {
}
}
}即具有多个viewType的Adapter,这时只需要继承
XListAdapter
public class CListAdapter extends XListAdapter<String> {
public CListAdapter(Context context) {
super(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
String item = data.get(position);
CListAdapter.ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item_single, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
public static class ViewHolder {
public ViewHolder(View convertView) {
}
}
}即具有一个viewType的Adapter,此时可继承
SimpleRecAdapter
public class BRecAdapter extends SimpleRecAdapter<String, BRecAdapter.ViewHolder> {
public BRecAdapter(Context context) {
super(context);
}
@Override
public ViewHolder newViewHolder(View itemView) {
return new ViewHolder(itemView);
}
@Override
public int getLayoutId() {
return R.layout.item_single;
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getSimpleItemClick() != null) {
getSimpleItemClick().onItemClick(position, data.get(position), 0, holder);
}
}
});
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
}即具有多个viewType的Adapter,此时可继承
RecyclerAdapter
public class DRecAdapter extends XRecyclerAdapter<String,DRecAdapter.ViewHolder> {
public DRecAdapter(Context context) {
super(context);
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_single, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
} //初始化
ILFactory.getLoader().init(context);
//从Asset中加载
ILFactory.getLoader().loadAssets(imageView, assetPath, null);
//从file中加载
ILFactory.getLoader().loadFile(imageView, new File(filePath), null);
//加载网络图片
ILFactory.getLoader().loadNet(imageView, urlPath, null);
//加载网络图片,设置监听
ILFactory.getLoader().loadNet(context, urlPath, null, new LoadCallback() {
@Override
public void onLoadReady(Bitmap bitmap) {
//图片下载成功
}
});
//从res中加载
ILFactory.getLoader().loadResource(imageView, resIds, null);
//清除内存缓存
ILFactory.getLoader().clearMemoryCache(context);
//继续加载
ILFactory.getLoader().resume(context);
//暂停加载
ILFactory.getLoader().pause(context);
//清理磁盘文件缓存
new Thread() {
@Override
public void run() {
super.run();
ILFactory.getLoader().clearDiskCache(context);
}
}.start();需要注意的是:
clearDiskCache()必须在线程中调用
扩展加载条件如动画、加载中图片、加载失败图片、缩放方式等,可以通过Options类进行扩展.
ILFactory.getLoader().loadNet(imageView, urlPath,
new ILoader.Options(loadingResId, loadErrorResId).scaleType(ImageView.ScaleType.FIT_CENTER));框架中内置了Glide的实现,如果需要使用其他图片加载框架,如picasso等,按如下步骤进行:
如果想使用picasso,则可以写一个
PicassoLoader,病实现ILoader接口。具体实现可参照GlideLoader
public class GlideLoader implements ILoader{
void init(Context context){}
void loadNet(ImageView target, String url, Options options){}
void loadNet(Context context, String url, Options options, LoadCallback callback{}
void loadResource(ImageView target, int resId, Options options){}
void loadAssets(ImageView target, String assetName, Options options){}
void loadFile(ImageView target, File file, Options options){}
void clearMemoryCache(Context context){}
void clearDiskCache(Context context){}
void resume(Context context){}
void pause(Context context){}
}ILFactory.setILoader(loader);不带参数的UI跳转
Router.newIntent(context) //context表示当前上下文
.to(EndActivity.class) //to()指定目标context
.launch();可使用put()方法指定跳转参数
Router.newIntent(context)
.to(EndActivity.class)
.putString("arg_name","xdroid")
.launch();通过
requestCode()方法指定请求码
Router.newIntent(context)
.to(EndActivity.class)
.putString("arg_name","xdroid")
.requestCode(100)
.launch();通过
anim()指定动画
Router.newIntent(context)
.to(EndActivity.class)
.putString("arg_name","xdroid")
.anim(enterAnim,exitAnim)
.launch();通过
addFlags()方法指定flag
Router.newIntent(context)
.to(EndActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.launch();通过
options()方法指定场景动画
Router.newIntent(context)
.to(EndActivity.class)
.options(ActivityOptionsCompat.makeBasic())
.launch();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实现。
SharedPref是对SharedPreferences的封装,包含了一系列的get&put方法、remove等。
推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。如:
public String getUserName(){
return getString(KEY.USER_NAME , null);
}可以在
XDroidBaseConf中配置缓存文件名称,默认是config
MemoryCache内部采用LruCache实现,是ICache的实现类。
推荐实践:创建一个新类,将键名作为常量,并封装对应的put&get静态方法,方便全局使用。
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();实现了上述方法。
可以在
XDroidBaseConf中配置缓存目录名称,默认是cache
自定义缓存只需要实现ICache即可。
Codec加密工具类囊括了几乎所有常用的加密算法,包括MD5、SHA、AES、DES、RSA等,具体操作可以阅读源码发现,这里不再赘述。
- 框架不再采用常见的堆工具类的方式,而是将所有常用的方法进行分类,聚合为一个类文件,实现了最大程度的精简。
- 工具类中包括Package(包管理)、Dimens(尺寸)、Random(随机数)、File(文件操作)、IO(IO操作)、Date(时间)、NetWork(网络)、Empty(空检测)、PatternMatcher(正则)等几个子分类。
- 工具类中内置了很多很靠谱的实现,如文件的md5等,还有更多彩蛋可以阅读相关源码。
ToastManager工具类可以方便的处理toast,避免长时间显示toast。
框架对log进行了美化输出,目前支持:
- text
- json
- xml
- throwable
具体的可调用:
XLog.json(json) //格式化json并输出其他使用类似。
XDroidBaseConf目前支持log、cache、router、imageloader几个部分的配置,没需要可以全部采用默认配置。
XDroidBaseConf.getInstance()
.setLog(true)//是否显示log输出
.setDefLogTag("XDroid")//默认的日志输出tag
.setCacheSpName("config")//配置sharedPref的文件名
.setCacheDiskDir("cache")//配置缓存文件夹名称
.setILLoadingRes(ILoader.Options.RES_NONE)//配置图片加载loding占位图
.setILErrorRes(ILoader.Options.RES_NONE)//配置图片加载失败占位图
.setILoader(new GlideLoader())//配置图片框架
.setRouterLaunchAnim(Router.RES_NONE, Router.RES_NONE)//配置launch动画
.setRouterPopAnim(Router.RES_NONE, Router.RES_NONE)//配置pop动画
.build();//设置生效- 1 概述篇
- 2 Base篇
- 3 ImageLoader篇
- 4 Router篇
- 5 Cache篇
- 6 Kit篇
- 7 Log篇
- 8 XDroidBaseConf篇