[更新于 2018.12.18]
前言
本文主要介紹如何使用在Github開源的Kongzue全家桶組件快速創(chuàng)建新項(xiàng)目皿桑,以及處理響應(yīng)式、權(quán)限等操作的方法蔬啡。
本文中演示的步驟成品將會在最終開源至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)方案,或者手動前往 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)建一個新的項(xiàng)目
進(jìn)入build.gradle(Module)添加上述引用,并刪除不必要的引用:
③關(guān)于Activity的修改
回到我們默認(rèn)創(chuàng)建的MainActivity裙士,可以看到它默認(rèn)是繼承自AppCompatActivity的入客,此時我們有更好的選擇,將他的繼承改為BaseActivity(com.kongzue.baseframework.BaseActivity)腿椎,按照IDE提示重寫三個方法(移動光標(biāo)到紅線報(bào)錯行桌硫,按下Alt+回車,默認(rèn)第一個菜單項(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)建:
在BaseActivity中裹虫,我們將一個Activity的所有事件劃分為三大塊:即綁定布局肿嘲、加載數(shù)據(jù)和綁定事件,這三塊對應(yīng)著需要重寫的initViews()筑公、initDatas(JumpParameter paramer)和setEvents()三個方法雳窟,完整的使用方法后便會有講述。
之所以去除onCreate方法匣屡,是因?yàn)樵贐aseActivity中封救,使用@Layout(layoutId)注解的形式方便我們在開發(fā)過程中可以快速找到一個Activity的布局引用,同時使用這種方式捣作,BaseActivity會自動加載綁定布局誉结,并實(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。
一個界面一般所具備的元素有也拜,標(biāo)題欄旭贬、內(nèi)容以及底欄Tabbar,這里我們先將activity_main的布局改為線性排布模式搪泳,并在其中添置一個標(biāo)題欄、內(nèi)容區(qū)以及底部導(dǎo)航欄扼脐。
標(biāo)題欄使用titlebar組件實(shí)現(xiàn)岸军,底部導(dǎo)航欄使用tabbar實(shí)現(xiàn):
需要注意的是由于我們使用的BaseActivity中自帶了沉浸式適配方式奋刽,使用titlebar的屬性statusBarTransparent會產(chǎn)生沖突,因此此處不啟用titlebar的沉浸式代碼艰赞,而使用僅設(shè)置狀態(tài)欄Padding的模式佣谐,即statusBarTransparentOnlyPadding = "true"。
同時方妖,因?yàn)锽aseActivity自帶的沉浸式也會使底部導(dǎo)航欄沉浸狭魂,因此tabbar必須開啟paddingNavigationBar="true"屬性,此時tabbar會自動生成一段底部高度党觅,該高度在有底部導(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的按鈕:
在有底部導(dǎo)航欄的手機(jī)上導(dǎo)航欄一般處于黑色背景狀態(tài)镐牺,為了讓界面更加和諧,我們可以在Activity上使用注解@NavigationBarBackgroundColor(a = 0)來使底部導(dǎo)航欄背景透明魁莉,同時可以使用注解@DarkNavigationBarTheme(true)來使底部導(dǎo)航欄按鈕呈現(xiàn)深色狀態(tài)睬涧。完整版的MainActivity類如下圖所示:
此時,主界面大體上就完成了旗唁。運(yùn)行下結(jié)果瞧瞧畦浓?
還不錯,另外因?yàn)槭侵鹘缑婕煲撸箻?biāo)題欄的返回按鈕隱藏讶请,可以使用noBackButton="true"來隱藏,具體可以參考titlebar的文檔电谣。
關(guān)于沉浸式的二談
首先秽梅,BaseActivity默認(rèn)就會開啟沉浸式適配,這將導(dǎo)致你的布局被系統(tǒng)屏幕頂部的狀態(tài)欄和底部的導(dǎo)航欄所遮蓋剿牺,這時如何保證內(nèi)容不背這些“安全區(qū)外”的區(qū)域所遮擋企垦,則需要以下手段:
一,在我以往的文章中有介紹安卓“安全區(qū)”設(shè)立的方式晒来,通過
android:fitsSystemWindows="true"
這句代碼設(shè)立安全區(qū)的方式來進(jìn)行內(nèi)容安全區(qū)的設(shè)立钞诡,被標(biāo)記了fitsSystemWindows的布局系統(tǒng)默認(rèn)會給它設(shè)置一個PaddingTop和PaddingBottom來將其中的內(nèi)容壓制到合理的范圍內(nèi)(即排除掉頂部狀態(tài)欄和底部導(dǎo)航欄的允許App自行使用的區(qū)域)那么這么搞我們?nèi)绻枰O(shè)置背景圖啊之類的可能就沒辦法“沉浸”到狀態(tài)欄下了。此時可以嘗試第二種方案:
二湃崩,使用組件解決這些毛病
在Kongzue全家桶組件中有頂部TitleBar和底部TabBar兩個組件荧降,他們分別帶有statusBarTransparentOnlyPadding和paddingNavigationBar方法,開啟這些方法他們會自動生成一段padding來將內(nèi)容頂?shù)桨踩珔^(qū)內(nèi)攒读,但又保留背景的空間朵诫,這樣就可以實(shí)現(xiàn)一體式的沉浸了,但他們的使用場景有限薄扁,如果我們不想或不能使用這些組件時剪返,可以自行進(jìn)行相應(yīng)的沉浸式開發(fā):
三废累,自行沉浸式
首先把需要“沉浸”到狀態(tài)欄、導(dǎo)航欄背景的布局(例如一個設(shè)置有背景圖的ImageView)放在最底下的布局脱盲,讓他們本身就處于沉浸式的范圍內(nèi)邑滨,然后建立安全區(qū)布局,將內(nèi)容放在安全區(qū)布局內(nèi)即可钱反。在需要實(shí)現(xiàn)既是內(nèi)容也需要沉浸的布局掖看,手動設(shè)置其setPadding(...)方法,根據(jù)需要填充其top面哥、bottom值為BaseActivity提供的getStatusBarHeight()或getNavbarHeight()即可哎壳。
咕咕咕咕咕咕...
好吧,這是個系列文章幢竹,第一篇主要是沉浸式相關(guān)的設(shè)置方式耳峦,先講到這里,后續(xù)的坑還有玩轉(zhuǎn)Kongzue對話框組件以及高效開發(fā)篇焕毫,有生之年一定寫完蹲坷,敬請期待!
另外喜歡本系列文章請點(diǎn)一下下邊的喜歡邑飒,你的支持是我前進(jìn)的動力循签!
已發(fā)布的目錄: