单 Acvitivy 架构是指整个应用只有一个 MainActivity, 可能还有个 SplashAcvitiy 来作为闪屏。笔者有个项目比较特殊,必须用单 Activity 来实现。单 Activity 架构的一个挑战就是需要处理好 Fragment 的嵌套问题。
笔者到 google 上一搜,也有不少文章或开源库讲单 Activity 架构的哦
知乎团队:Single Activity Multiple Fragments Architecture
Modern Android: Ditching Activities and Fragments
因为其他同学可能也对单 Activity 架构感兴趣,因此笔者从项目中抽离出了这个子项目,专门用来处理单 Acvitity 架构的问题。
由于笔者也做了几年的 iOS 开发,而 iOS 的导航系统是比较完善的。因此这个单 Activity 架构组件的设计参考了 iOS 的导航系统。
在 iOS 中,只有一个 keyWindow,它可以设置一个 rootViewController,这个 rootViewController 可能是一个容器,里面包含着其它 UIViewController, 而被包含的 controller 可能也还是个容器。也就是说,在 iOS 中,控制器是一层套一层的。
碰巧,在 Android 中,Activity 也是一个 Window,Activity 也可以设置 Fragment, Fragment 也可以嵌套,感觉就是异曲同工啊。
所以呢,笔者就照着 iOS 的样子,实现这个组件
Compare with iOS
AndroidNavigation | iOS |
---|---|
AwesomeActivity | Window |
AwesomeActivity#setRootFragment | Window#rootViewController |
AwesomeFragment | UIViewController |
NavigationFragment | UINavigationController |
TabBarFragment | UITabBarController |
DrawerFragment | - |
特性
- 一行代码实现 Fragment 嵌套,一次性构建好嵌套层级
- 一行代码实现 Fragment 跳转,不再需要写一大堆操作 fragment 的代码了,不用担心用错 FragmentManager 了
- 一行代码开关沉浸式状态栏,兼容到 Android 4.4 并解决了相关 BUG
- 自动为你创建 Toolbar,一行代码设置标题、按钮,支持关闭自动创建功能以实现定制
- 一处设置全局样式,到处使用,并且支持不同页面个性化
- 支持 font icons
截图
如果你身边有同学也对单 Activity 架构感兴趣,那么推荐给他吧。