使用Kongzue全家桶组件创建项目全攻略(一、引入和沉浸式的那些事儿)

[更新于 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创建一个新的项目


新项目.png

进入build.gradle(Module)添加上述引用,并删除不必要的引用:


implementation.png

③关于Activity的修改

回到我们默认创建的MainActivity,可以看到它默认是继承自AppCompatActivity的,此时我们有更好的选择,将他的继承改为BaseActivity(com.kongzue.baseframework.BaseActivity),按照IDE提示重写三个方法(移动光标到红线报错行,按下Alt+回车,默认第一个菜单项即是重写选项),接着可以看到onCreate方法被拉了一条线,不再推荐使用,因为在BaseActivity中我们通过注解实现界面的创建,删除onCreate方法,在MainActivity的类名上使用@Layout(R.layout.activity_main)注解进行声明,即可完成MainActivity的修改和创建:

Create BaseActivity.png

在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。


修改styles

一个界面一般所具备的元素有,标题栏、内容以及底栏Tabbar,这里我们先将activity_main的布局改为线性排布模式,并在其中添置一个标题栏、内容区以及底部导航栏。
标题栏使用titlebar组件实现,底部导航栏使用tabbar实现:


XML布局

需要注意的是由于我们使用的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类如下图所示:


沉浸式2

此时,主界面大体上就完成了。运行下结果瞧瞧?
运行效果

还不错,另外因为是主界面,要使标题栏的返回按钮隐藏,可以使用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对话框组件以及高效开发篇,有生之年一定写完,敬请期待!
另外喜欢本系列文章请点一下下边的喜欢,你的支持是我前进的动力!

已发布的目录:

一、引入和沉浸式的那些事儿

二、跳转,权限,我闭着眼~(上)

二、跳转,权限,我闭着眼~(下)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,467评论 2 59
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,561评论 25 707
  • 初来乍到 请多指教 没事笑笑 开心就好
    y凡凡不烦阅读 189评论 0 0
  • 今日雨,小雨一直淅沥淅沥的下个不停,一整天都没太阳,车间里并不算忙。 下午来了一个急单,客户要来拿货,我们俩个人分...
    A把时间当做朋友阅读 168评论 0 3
  • 内地行------3.济南 5月26日晚2点到济南机场,下飞机坐出租车到少年宫附近的熙遥宾馆,只剩一间房很晚了只能...
    寒香js阅读 241评论 0 1