Design-WanAndroid
Introduction: 🦄WanAndroid 的最佳 Material Design 实践,严格遵循 Material 设计,完美支持其 Dynamic Colors 等新特性,MVVM 架构,保证 UI 风格、逻辑设计的一致性。全盘采用 Jetpack,只为解决某些特定问题而引入其他依赖,避免大材小用,且尽可能均自己实现
Tags:
Compose 化部分页面
目前暂有:主题选择界面
界面:
原 WanAndroid 开放的 Api 功能均已实现
App 内通篇全采用Material Design 3风格,拒绝半完成式 Material 带来的 UI 的割裂感。
所有 Icon 取自Material Symbols,统一而规范的设计。
主题色遵循Material3 Color system。
- PrimaryColor, On-primary, Primary container, On-primary container
- SecondaryColor 同上
- TertiaryColor
截图展示
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
默认主题色采用Material Theme Builder从图片取色而成。
实现Dynamic Colors,开启动态主题色后,App 主题色自动跟随系统主题色且适配深色模式,保持一贯的视觉体验(Android 12 及以上支持)
所以可交互的 UI 均带有 Ripple 效果,明确表示这是个可交互控件,且 Ripple 颜色支持取自当前 Dynamic colors 的主题色
逻辑:
详细细节可转到Design WanAndroid(WanAndroid 的最佳可使用的 Android 客户端)
使用 buildSrc,实现全局且统一的依赖管理。
严格遵循Android Architecture Components,逻辑分为:
- 界面层(UI Layer)
- APP 内实现:视图(Activity/Fragment 等) + 数据驱动及处理逻辑的状态容器(ViewModel 等)
- 网域层(Domain Layer) 可选项,用于处理复杂逻辑或支持可重用性吗,当你需要从不同数据源获取数据时如需要同时从数据库和接口请求数据时,推荐使用 UseCase 进行组合。
- App 内实现:组合或复用数据源(UseCase)
- 数据层(Data Layer)
- App 内实现:数据源(Repository)
当你采用某项东西,应是为了解决某些特定的问题,不能单纯为了用而用。在该架构下:
- 对于网络请求的需要,引入通用的网络请求库,Retrofit + OkHttp。
- 对于网络异常处理的需要,自定义 Retrofit NetworkResponseAdapterFactory和GsonConverterFactory,包装接口返回,自定义解析区分业务 code,实现全局的接口错误或业务逻辑错误处理,同时下游也可按需获取错误类型。
- 针对数据层 Repository 需要以及 UseCase 需要复用并组合各类 Service,引入Hilt,解决依赖注入问题,提高可重用性且避免强依赖。
- 对于网络请求的线程切换使用Kotlin 协程,针对复杂且需要进行各类转换处理的数据流使用Flow,对于 One-shot 数据使用LiveData,因为 LiveData 设计初衷并非用于处理复杂的响应数据流。
- 对于 App 内的部分需要持久化数据如登陆状态的 Cookie、KV 数据等小型数据引入DataStore和Kotlin Serialization
- 对于 RecyclerView 引入Paging3列表的加载及状态处理
- 针对列表的多类型 Item,导入并自定义修改 MultiType 实现PagingMultiTypeAdapter使其能够支持配合 Paging3 使用
除以上主要依赖外,其他引入有Banner和AgentWeb,除此之外其余功能均自己实现。
最后:
有任何问题欢迎提 Issue,如果喜欢的话也可以给个⭐Star












