目录
1、项目架构初始化
1.1 配置项的存储与获取
位于latte-core模块下的Configurator类,使用静态内部类方法保证单例模式
public static Configurator getInstance() {
return Holder.INSTANCE;
}
private static class Holder {
private static final Configurator INSTANCE = new Configurator();
}
1、使用建造者模式设计配置项类,对配置项进行管理,通过链式调用方便使用
public final Configurator withIcon(IconFontDescriptor descriptor) {//链式调用with..()方法
ICONS.add(descriptor);
return this;
}
public final Configurator withInterceptor(Interceptor interceptor) {
INTERCEPTORS.add(interceptor);
LATTE_CONFIGS.put(ConfigKeys.INTERCEPTOR, INTERCEPTORS);
return this;
}
......
2、内部使用HashMap保存所有配置信息,key使用枚举类(单例),在多线程时保证安全
private static final HashMap<Object, Object> LATTE_CONFIGS = new HashMap<>();//存储信息
final <T> T getConfiguration(Object key) {//获取配置信息
checkConfiguration();//检查是否配置完毕
final Object value = LATTE_CONFIGS.get(key);
if (value == null) {
throw new NullPointerException(key.toString() + "IS NULL");
}
return (T) LATTE_CONFIGS.get(key);
}
1.2 配置项的对外包装类
位于latte-core模块下的Latte类,使用final修饰,是Configurator类的包装类,对外提供,内部调用Configurator类
public static Configurator init(Context context) {//初始化配置项,入口
Configurator.getInstance()
.getLatteConfigs()
.put(ConfigKeys.APPLICATION_CONTEXT, context.getApplicationContext());
return Configurator.getInstance();
}
public static Configurator getConfigurator() {//获取Configurator类的对象
return Configurator.getInstance();
}
public static <T> T getConfiguration(Object key){//获取配置信息
return getConfigurator().getConfiguration(key);
}
1.3 项目入口,进行配置
位于example模块下的ExampleApp类,继承Application类
1、在Manifest中进行配置:android:name
<application
** android:name=".ExampleApp"
2、Application的onCreate()方法会在应用创建时被执行,适合进行全局初始化配置文件。
public void onCreate() {
super.onCreate();
Latte.init(this)//使用包装类进行调用
.withApiHost("")
.withIcon(new FontAwesomeModule())
.withIcon(new FontEcModule())
.withInterceptor(new DebugInterceptor("test", R.raw.test))
.configure();//配置结束
2、字体图标库集成与封装
2.1 引入字体图标库
build.gradle(Module:latte-core)引入icon库,同步项目
api 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'
api 'com.joanzapata.iconify:android-iconify-ionicons:2.2.2'
2.2 通过对Icon库封装,创建自己的图标库
位于latte-ec模块下的FontEcModule类,继承IconFontDescriptor类,对字体图标库进行了封装
public Icon[] characters() {
return EcIcons.values();
}
位于latte-ec模块下的EcIcons类,继承Icon类,对字体图标进行了更换、封装
icon_scan('\ue606'),//EcIcons.values()
icon_ali_pay('\ue606'),
icon_star('\ue66e'),
icon_selected_star('\ue805');
在Configurator类的初始化配置完成的configure()中进行初始化调用。加入到字体图标库中。
在入口处通过链式调用配置。