[更新于 2018.12.18]
前言
本文主要介绍如何使用在Github开源的Kongzue全家桶组件快速创建新项目,以及处理响应式、权限等操作的方法。
本文中演示的步骤成品将会在最终开源至Github,有兴趣可以前往下载(https://github.com/kongzue/Example)。
本篇将讲述如何引入Kongzue全家桶组件以及沉浸式相关的那些事儿。
①引用组件
目前Kongzue全家桶能够提供的组件主要由基础框架以及额外的对话框、软件更新、网络请求上传、相册选择拍照、标题栏和底部导航栏组件组成。
首先可以根据 https://kongzue.github.io/ 提供的指导方案,或者手动前往 https://github.com/kongzue 查看最新的开源组件,并准备引用到项目中:
//对话框
implementation 'com.kongzue.dialog:dialog:2.4.2'
//基础框架
implementation 'com.kongzue.baseframework:baseframework:6.6.0'
//是否需要更新组件及模块:
implementation 'com.kongzue.kongzueupdatesdk:kongzueupdatesdk:1.4.1'
//是否需要选择图片、拍照的功能:
implementation 'com.kongzue.takephoto:takephoto:2.0.8'
//若是需要访问网络功能
implementation 'com.kongzue.baseokhttp_v3:baseokhttp_v3:3.0.4'
//若是需要底部导航栏
implementation 'com.kongzue.tabbar:tabbar:1.5.3'
//若是需要顶部标题栏+沉浸式适配方案2
implementation 'com.kongzue.titlebar:titlebar:1.2.4'
//若是需要数据库
implementation 'com.kongzue.kongzuedb:kongzuedb:1.0.1'
//下拉刷新上拉加载
implementation 'com.scwang.smartrefresh:SmartRefreshLayout:1.1.0-alpha-14'
//轮播图框架
implementation 'com.youth.banner:banner:1.4.10'
//Fresco图片框架
implementation 'com.facebook.fresco:fresco:0.12.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
②创建项目
当前使用最新的Android Studio3.2.1创建一个新的项目
进入build.gradle(Module)添加上述引用,并删除不必要的引用:
③关于Activity的修改
回到我们默认创建的MainActivity,可以看到它默认是继承自AppCompatActivity的,此时我们有更好的选择,将他的继承改为BaseActivity(com.kongzue.baseframework.BaseActivity),按照IDE提示重写三个方法(移动光标到红线报错行,按下Alt+回车,默认第一个菜单项即是重写选项),接着可以看到onCreate方法被拉了一条线,不再推荐使用,因为在BaseActivity中我们通过注解实现界面的创建,删除onCreate方法,在MainActivity的类名上使用@Layout(R.layout.activity_main)注解进行声明,即可完成MainActivity的修改和创建:
在BaseActivity中,我们将一个Activity的所有事件划分为三大块:即绑定布局、加载数据和绑定事件,这三块对应着需要重写的initViews()、initDatas(JumpParameter paramer)和setEvents()三个方法,完整的使用方法后便会有讲述。
之所以去除onCreate方法,是因为在BaseActivity中,使用@Layout(layoutId)注解的形式方便我们在开发过程中可以快速找到一个Activity的布局引用,同时使用这种方式,BaseActivity会自动加载绑定布局,并实现沉浸式适配。
④对于布局的修改和沉浸式
Android 默认创建的项目是带标题栏的,但其使用和功能并没有titlebar组件来的方便容易,因此首先我们需要在res/values/styles中将AppTheme的风格由默认的“Theme.AppCompat.Light.DarkActionBar”设置为“Theme.AppCompat.Light.NoActionBar”以去掉默认界面自带的的ActionBar。
一个界面一般所具备的元素有,标题栏、内容以及底栏Tabbar,这里我们先将activity_main的布局改为线性排布模式,并在其中添置一个标题栏、内容区以及底部导航栏。
标题栏使用titlebar组件实现,底部导航栏使用tabbar实现:
需要注意的是由于我们使用的BaseActivity中自带了沉浸式适配方式,使用titlebar的属性statusBarTransparent会产生冲突,因此此处不启用titlebar的沉浸式代码,而使用仅设置状态栏Padding的模式,即statusBarTransparentOnlyPadding = "true"。
同时,因为BaseActivity自带的沉浸式也会使底部导航栏沉浸,因此tabbar必须开启paddingNavigationBar="true"属性,此时tabbar会自动生成一段底部高度,该高度在有底部导航栏的手机上等于底部导航栏高度。
具体属性和设置可以参考对应的组件使用说明:
顶部标题栏titlebar文档:
https://github.com/kongzue/TitleBar
底部导航栏tabbar文档:
https://github.com/kongzue/Tabbar
回到代码中,绑定布局,并设置tabbar的按钮:
在有底部导航栏的手机上导航栏一般处于黑色背景状态,为了让界面更加和谐,我们可以在Activity上使用注解@NavigationBarBackgroundColor(a = 0)来使底部导航栏背景透明,同时可以使用注解@DarkNavigationBarTheme(true)来使底部导航栏按钮呈现深色状态。完整版的MainActivity类如下图所示:
此时,主界面大体上就完成了。运行下结果瞧瞧?
还不错,另外因为是主界面,要使标题栏的返回按钮隐藏,可以使用noBackButton="true"来隐藏,具体可以参考titlebar的文档。
关于沉浸式的二谈
首先,BaseActivity默认就会开启沉浸式适配,这将导致你的布局被系统屏幕顶部的状态栏和底部的导航栏所遮盖,这时如何保证内容不背这些“安全区外”的区域所遮挡,则需要以下手段:
一,在我以往的文章中有介绍安卓“安全区”设立的方式,通过
android:fitsSystemWindows="true"
这句代码设立安全区的方式来进行内容安全区的设立,被标记了fitsSystemWindows的布局系统默认会给它设置一个PaddingTop和PaddingBottom来将其中的内容压制到合理的范围内(即排除掉顶部状态栏和底部导航栏的允许App自行使用的区域)那么这么搞我们如果需要设置背景图啊之类的可能就没办法“沉浸”到状态栏下了。此时可以尝试第二种方案:
二,使用组件解决这些毛病
在Kongzue全家桶组件中有顶部TitleBar和底部TabBar两个组件,他们分别带有statusBarTransparentOnlyPadding和paddingNavigationBar方法,开启这些方法他们会自动生成一段padding来将内容顶到安全区内,但又保留背景的空间,这样就可以实现一体式的沉浸了,但他们的使用场景有限,如果我们不想或不能使用这些组件时,可以自行进行相应的沉浸式开发:
三,自行沉浸式
首先把需要“沉浸”到状态栏、导航栏背景的布局(例如一个设置有背景图的ImageView)放在最底下的布局,让他们本身就处于沉浸式的范围内,然后建立安全区布局,将内容放在安全区布局内即可。在需要实现既是内容也需要沉浸的布局,手动设置其setPadding(...)方法,根据需要填充其top、bottom值为BaseActivity提供的getStatusBarHeight()或getNavbarHeight()即可。
咕咕咕咕咕咕...
好吧,这是个系列文章,第一篇主要是沉浸式相关的设置方式,先讲到这里,后续的坑还有玩转Kongzue对话框组件以及高效开发篇,有生之年一定写完,敬请期待!
另外喜欢本系列文章请点一下下边的喜欢,你的支持是我前进的动力!
已发布的目录: