使用Kongzue全家桶組件創(chuàng)建項(xiàng)目全攻略(一、引入和沉浸式的那些事兒)

[更新于 2018.12.18]

前言

本文主要介紹如何使用在Github開源的Kongzue全家桶組件快速創(chuàng)建新項(xiàng)目,以及處理響應(yīng)式、權(quán)限等操作的方法。
本文中演示的步驟成品將會(huì)在最終開源至Github,有興趣可以前往下載(https://github.com/kongzue/Example)。
本篇將講述如何引入Kongzue全家桶組件以及沉浸式相關(guān)的那些事兒。

①引用組件

目前Kongzue全家桶能夠提供的組件主要由基礎(chǔ)框架以及額外的對話框、軟件更新、網(wǎng)絡(luò)請求上傳、相冊選擇拍照、標(biāo)題欄和底部導(dǎo)航欄組件組成。
首先可以根據(jù) https://kongzue.github.io/ 提供的指導(dǎo)方案,或者手動(dòng)前往 https://github.com/kongzue 查看最新的開源組件,并準(zhǔn)備引用到項(xiàng)目中:

//對話框
implementation 'com.kongzue.dialog:dialog:2.4.2'
//基礎(chǔ)框架
implementation 'com.kongzue.baseframework:baseframework:6.6.0'
//是否需要更新組件及模塊:
implementation 'com.kongzue.kongzueupdatesdk:kongzueupdatesdk:1.4.1'
//是否需要選擇圖片、拍照的功能:
implementation 'com.kongzue.takephoto:takephoto:2.0.8'
//若是需要訪問網(wǎng)絡(luò)功能
implementation 'com.kongzue.baseokhttp_v3:baseokhttp_v3:3.0.4'
//若是需要底部導(dǎo)航欄
implementation 'com.kongzue.tabbar:tabbar:1.5.3'
//若是需要頂部標(biāo)題欄+沉浸式適配方案2
implementation 'com.kongzue.titlebar:titlebar:1.2.4'
//若是需要數(shù)據(jù)庫
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'

②創(chuàng)建項(xiàng)目

當(dāng)前使用最新的Android Studio3.2.1創(chuàng)建一個(gè)新的項(xiàng)目


新項(xiàng)目.png

進(jìn)入build.gradle(Module)添加上述引用,并刪除不必要的引用:


implementation.png

③關(guān)于Activity的修改

回到我們默認(rèn)創(chuàng)建的MainActivity,可以看到它默認(rèn)是繼承自AppCompatActivity的,此時(shí)我們有更好的選擇,將他的繼承改為BaseActivity(com.kongzue.baseframework.BaseActivity),按照IDE提示重寫三個(gè)方法(移動(dòng)光標(biāo)到紅線報(bào)錯(cuò)行,按下Alt+回車,默認(rèn)第一個(gè)菜單項(xiàng)即是重寫選項(xiàng)),接著可以看到onCreate方法被拉了一條線,不再推薦使用,因?yàn)樵贐aseActivity中我們通過注解實(shí)現(xiàn)界面的創(chuàng)建,刪除onCreate方法,在MainActivity的類名上使用@Layout(R.layout.activity_main)注解進(jìn)行聲明,即可完成MainActivity的修改和創(chuàng)建:

Create BaseActivity.png

在BaseActivity中,我們將一個(gè)Activity的所有事件劃分為三大塊:即綁定布局、加載數(shù)據(jù)和綁定事件,這三塊對應(yīng)著需要重寫的initViews()、initDatas(JumpParameter paramer)和setEvents()三個(gè)方法,完整的使用方法后便會(huì)有講述。
之所以去除onCreate方法,是因?yàn)樵贐aseActivity中,使用@Layout(layoutId)注解的形式方便我們在開發(fā)過程中可以快速找到一個(gè)Activity的布局引用,同時(shí)使用這種方式,BaseActivity會(huì)自動(dòng)加載綁定布局,并實(shí)現(xiàn)沉浸式適配。

④對于布局的修改和沉浸式

Android 默認(rèn)創(chuàng)建的項(xiàng)目是帶標(biāo)題欄的,但其使用和功能并沒有titlebar組件來的方便容易,因此首先我們需要在res/values/styles中將AppTheme的風(fēng)格由默認(rèn)的“Theme.AppCompat.Light.DarkActionBar”設(shè)置為“Theme.AppCompat.Light.NoActionBar”以去掉默認(rèn)界面自帶的的ActionBar。


修改styles

一個(gè)界面一般所具備的元素有,標(biāo)題欄、內(nèi)容以及底欄Tabbar,這里我們先將activity_main的布局改為線性排布模式,并在其中添置一個(gè)標(biāo)題欄、內(nèi)容區(qū)以及底部導(dǎo)航欄。
標(biāo)題欄使用titlebar組件實(shí)現(xiàn),底部導(dǎo)航欄使用tabbar實(shí)現(xiàn):


XML布局

需要注意的是由于我們使用的BaseActivity中自帶了沉浸式適配方式,使用titlebar的屬性statusBarTransparent會(huì)產(chǎn)生沖突,因此此處不啟用titlebar的沉浸式代碼,而使用僅設(shè)置狀態(tài)欄Padding的模式,即statusBarTransparentOnlyPadding = "true"。
同時(shí),因?yàn)锽aseActivity自帶的沉浸式也會(huì)使底部導(dǎo)航欄沉浸,因此tabbar必須開啟paddingNavigationBar="true"屬性,此時(shí)tabbar會(huì)自動(dòng)生成一段底部高度,該高度在有底部導(dǎo)航欄的手機(jī)上等于底部導(dǎo)航欄高度。
具體屬性和設(shè)置可以參考對應(yīng)的組件使用說明:

頂部標(biāo)題欄titlebar文檔:
https://github.com/kongzue/TitleBar
底部導(dǎo)航欄tabbar文檔:
https://github.com/kongzue/Tabbar

回到代碼中,綁定布局,并設(shè)置tabbar的按鈕:


設(shè)置組件

在有底部導(dǎo)航欄的手機(jī)上導(dǎo)航欄一般處于黑色背景狀態(tài),為了讓界面更加和諧,我們可以在Activity上使用注解@NavigationBarBackgroundColor(a = 0)來使底部導(dǎo)航欄背景透明,同時(shí)可以使用注解@DarkNavigationBarTheme(true)來使底部導(dǎo)航欄按鈕呈現(xiàn)深色狀態(tài)。完整版的MainActivity類如下圖所示:


沉浸式2

此時(shí),主界面大體上就完成了。運(yùn)行下結(jié)果瞧瞧?
運(yùn)行效果

還不錯(cuò),另外因?yàn)槭侵鹘缑?,要使?biāo)題欄的返回按鈕隱藏,可以使用noBackButton="true"來隱藏,具體可以參考titlebar的文檔。

關(guān)于沉浸式的二談

首先,BaseActivity默認(rèn)就會(huì)開啟沉浸式適配,這將導(dǎo)致你的布局被系統(tǒng)屏幕頂部的狀態(tài)欄和底部的導(dǎo)航欄所遮蓋,這時(shí)如何保證內(nèi)容不背這些“安全區(qū)外”的區(qū)域所遮擋,則需要以下手段:

一,在我以往的文章中有介紹安卓“安全區(qū)”設(shè)立的方式,通過

android:fitsSystemWindows="true"

這句代碼設(shè)立安全區(qū)的方式來進(jìn)行內(nèi)容安全區(qū)的設(shè)立,被標(biāo)記了fitsSystemWindows的布局系統(tǒng)默認(rèn)會(huì)給它設(shè)置一個(gè)PaddingTop和PaddingBottom來將其中的內(nèi)容壓制到合理的范圍內(nèi)(即排除掉頂部狀態(tài)欄和底部導(dǎo)航欄的允許App自行使用的區(qū)域)那么這么搞我們?nèi)绻枰O(shè)置背景圖啊之類的可能就沒辦法“沉浸”到狀態(tài)欄下了。此時(shí)可以嘗試第二種方案:

二,使用組件解決這些毛病
在Kongzue全家桶組件中有頂部TitleBar和底部TabBar兩個(gè)組件,他們分別帶有statusBarTransparentOnlyPadding和paddingNavigationBar方法,開啟這些方法他們會(huì)自動(dòng)生成一段padding來將內(nèi)容頂?shù)桨踩珔^(qū)內(nèi),但又保留背景的空間,這樣就可以實(shí)現(xiàn)一體式的沉浸了,但他們的使用場景有限,如果我們不想或不能使用這些組件時(shí),可以自行進(jìn)行相應(yīng)的沉浸式開發(fā):

三,自行沉浸式
首先把需要“沉浸”到狀態(tài)欄、導(dǎo)航欄背景的布局(例如一個(gè)設(shè)置有背景圖的ImageView)放在最底下的布局,讓他們本身就處于沉浸式的范圍內(nèi),然后建立安全區(qū)布局,將內(nèi)容放在安全區(qū)布局內(nèi)即可。在需要實(shí)現(xiàn)既是內(nèi)容也需要沉浸的布局,手動(dòng)設(shè)置其setPadding(...)方法,根據(jù)需要填充其top、bottom值為BaseActivity提供的getStatusBarHeight()或getNavbarHeight()即可。


咕咕咕咕咕咕...

好吧,這是個(gè)系列文章,第一篇主要是沉浸式相關(guān)的設(shè)置方式,先講到這里,后續(xù)的坑還有玩轉(zhuǎn)Kongzue對話框組件以及高效開發(fā)篇,有生之年一定寫完,敬請期待!
另外喜歡本系列文章請點(diǎn)一下下邊的喜歡,你的支持是我前進(jìn)的動(dòng)力!

已發(fā)布的目錄:

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

二、跳轉(zhuǎn),權(quán)限,我閉著眼~(上)

二、跳轉(zhuǎn),權(quán)限,我閉著眼~(下)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,096評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 初來乍到 請多指教 沒事笑笑 開心就好
    y凡凡不煩閱讀 204評論 0 0
  • 今日雨,小雨一直淅瀝淅瀝的下個(gè)不停,一整天都沒太陽,車間里并不算忙。 下午來了一個(gè)急單,客戶要來拿貨,我們倆個(gè)人分...
  • 內(nèi)地行------3.濟(jì)南 5月26日晚2點(diǎn)到濟(jì)南機(jī)場,下飛機(jī)坐出租車到少年宮附近的熙遙賓館,只剩一間房很晚了只能...
    寒香js閱讀 331評論 0 1

友情鏈接更多精彩內(nèi)容