Scaffold是什么?
- 是一个脚手架项目。如果你新开始一个项目,可以从本项目开始,仓库地址传送门;
- 项目中的某些功能,如果你觉得不错,可以直接拿去使用;
内置组件和页面概览
- 内置页面;
- 内置组件SlidingTabLayout;
- 内置组件BottomNavigationLayout;
- 内置组件TitleLayout;
- 内置组件ImgTxtLayout;
- 内置组件SettingItemView;
- 内置组件SettingToggleView;
- recyclerview:
- 内置LinearItemDecoration,等分GridItemDecoration;
- 支持上拉下拉,用法如下,继承BaseRcv;
public class TestRcv extends BaseRcv<String> { public TestRcv(Context context) { super(context); } public TestRcv(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected EasyRcvHolder<String> getItemHolder(@NonNull ViewGroup parent, int type) { return new EasyRcvHolder(LayoutInflater.from(getContext()).inflate(R.layout.normal_recyclerview_item, parent, false)) { private CircleImageView mNormalRecyclerviewItemAvatar; private TextView mNormalRecyclerviewItemName; @Override protected View onCreateView() { mNormalRecyclerviewItemAvatar = mView.findViewById(R.id.normal_recyclerview_item_avatar); mNormalRecyclerviewItemName = mView.findViewById(R.id.normal_recyclerview_item_name); return mView; } @Override protected void refreshView(int position, Object item) { UserInfo userInfo = (UserInfo) item; ImageLoader.load(mContext, userInfo.getAvatar(), mNormalRecyclerviewItemAvatar); mNormalRecyclerviewItemName.setText(Util.nullToEmpty(userInfo.getName())); } } } }
- http请求三级缓存
内置文字样式
- 根据material design设计规范,内置常见样式,例如headline2样式定义如下:
<style name="H2.Black.High" parent="TextAppearance.MaterialComponents.Headline2">
<item name="android:textColor">@color/black6</item>
</style>
<style name="H2.Black.High.Left" parent="H2.Black.High">
<item name="android:gravity">start</item>
</style>
<style name="H2.Black.High.Center" parent="H2.Black.High">
<item name="android:gravity">center</item>
</style>
<style name="H2.Black.High.Right" parent="H2.Black.High">
<item name="android:gravity">end</item>
</style>
内置常用类
- ContextManager:上下文管理,包括以下功能:
- 获取当前Activity/当前Activity的FragmentManager;
- 在不能直接获取Context页面,获取string/dimen/color/drawable等;
- 获取当前应用是否在后台以及应用进入前后台监听;
- KVFileCache:系统Preference替代品,用于存储一些偏好数据,支持基本数据类型和类;
- DialogUtil:封装DialogFragment显示/移除;
- DensityUtil:dp,sp,px相互转换,屏幕尺寸获取等;
- StatusBarUtil:设置状态栏颜色;
- ImgLoader:图片加载;
- JsonUtil:json处理;
- 其他;
架构模式
mvvm + livedata + lifecycle,具体使用请查阅源码;
module介绍
- scaffold module:脚手架;
- app module:
- 依赖于scaffold;
- 新增"异常上报"(使用bugly),"用户反馈"(使用吐个槽)两个功能;
- 本项目采用MVVM + DataBinding + LivaData + Lifecycle架构,因此增加架构所需基本代码;
- 增加示例代码,方便开发者查阅使用示例;
依赖库
app module
名称 | 版本 |
---|---|
bugly | 最新 |
兔小巢 | 最新 |
scaffold module
名称 | 版本 | 描述 |
---|---|---|
androidx | - | 详见build文件 |
lifecycle | 2.5.1 | - |
Timber | 4.7.1 | 日志 |
fastjson | 1.1.70.android | - |
CircleImageView | 2.2.0 | - |
BGAQRCode-Android | 3.3.3 | 已直接集成进包内,优化识别速度,增加光线识别动态显示闪光灯图标 |
flexbox | 1.1.0 | - |
retrofit | 2.5.0 | - |
glide | 4.10.0 | - |
MMKV | 1.0.24 | 用于替换SharePreference |
UltraViewPager | 1.0.7.7 | 原版本不支持androidx,因此已直接集成进包内 |
PhotoView | 2.3.0 | - |
SmartRefreshLayout | 2.0.0-alpha-1 | 上拉下拉 |
Compressor | 3.0.0 | 图片压缩 |
注意
- 更改依赖版本时,需同步更新混淆文件;
如何使用?
替换包名
- 用android studio全局替换快捷键
(如果之前没用过该快捷键,可以在
Settings->Keymap
中搜索Replace in Path
以查询该快捷键) 将包名替换为自己的包名 - 此时文件中的包名已成功替换,不过项目的包名仍然未变,打开项目所在文件,将项目包名替换
- 此时项目应该能正常运行
修改debug keystore
- 根据需要修改debug keystore及其在build.gradle中的配置
替换内置依赖库中的key
全局搜索key_strings.xml文件,里面包括以下key:
集成后示例代码如何处理?
项目中示例代码存在于以下几处,开发者可以随时删除,也可以留着以便查阅功能使用(不影响正常开发):
- 模块app中:page/demo目录,此为示例代码;
- 模块app中:res/layout/demo目录(需将目录显示模式改为Project Files,否则看不到此目录),此为示例代码布局文件;