在日常的Android開發(fā)中键思,我們肯定遇到沉浸式的開發(fā)需求础爬。在大多數(shù)項(xiàng)目當(dāng)中,都會(huì)使用ImmersionBar
開源庫(kù)適配吼鳞。這篇博客分享一下ImmersionBar
相關(guān)的知識(shí)看蚜,希望對(duì)看文章的小伙伴有所幫助。
ImmersionBar依賴
mavenCentral
版本:
// 基礎(chǔ)依賴包赔桌,必須要依賴
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
// kotlin擴(kuò)展(可選)
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.2'
// fragment快速實(shí)現(xiàn)(可選)已廢棄
implementation 'com.geyifeng.immersionbar:immersionbar-components:3.2.2'
jcenter
版本:
// 基礎(chǔ)依賴包供炎,必須要依賴
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
// kotlin擴(kuò)展(可選)
implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0'
// fragment快速實(shí)現(xiàn)(可選)
implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0'
我寫博客的時(shí)候,開源庫(kù)的版本是3.2.2
疾党。后續(xù)可以查看ImmersionBar開源文檔
適配全面屏與劉海屏
<!--適配華為(huawei)劉海屏-->
<meta-data
android:name="android.notch_support"
android:value="true"/>
<!--適配小米(xiaomi)劉海屏-->
<meta-data
android:name="notch.config"
android:value="portrait|landscape" />
這個(gè)適配代碼是加在AndroidManifest.xml
中音诫。
Api詳解
基礎(chǔ)用法:
ImmersionBar.with(this).init();
所有的參數(shù)解釋:
ImmersionBar.with(this)
.transparentStatusBar() //透明狀態(tài)欄,不寫默認(rèn)透明色
.transparentNavigationBar() //透明導(dǎo)航欄雪位,不寫默認(rèn)黑色(設(shè)置此方法竭钝,fullScreen()方法自動(dòng)為true)
.transparentBar() //透明狀態(tài)欄和導(dǎo)航欄,不寫默認(rèn)狀態(tài)欄為透明色茧泪,導(dǎo)航欄為黑色(設(shè)置此方法蜓氨,fullScreen()方法自動(dòng)為true)
.statusBarColor(R.color.colorPrimary) //狀態(tài)欄顏色,不寫默認(rèn)透明色
.navigationBarColor(R.color.colorPrimary) //導(dǎo)航欄顏色队伟,不寫默認(rèn)黑色
.barColor(R.color.colorPrimary) //同時(shí)自定義狀態(tài)欄和導(dǎo)航欄顏色穴吹,不寫默認(rèn)狀態(tài)欄為透明色,導(dǎo)航欄為黑色
.statusBarAlpha(0.3f) //狀態(tài)欄透明度嗜侮,不寫默認(rèn)0.0f
.navigationBarAlpha(0.4f) //導(dǎo)航欄透明度港令,不寫默認(rèn)0.0F
.barAlpha(0.3f) //狀態(tài)欄和導(dǎo)航欄透明度,不寫默認(rèn)0.0f
.statusBarDarkFont(true) //狀態(tài)欄字體是深色锈颗,不寫默認(rèn)為亮色
.navigationBarDarkIcon(true) //導(dǎo)航欄圖標(biāo)是深色顷霹,不寫默認(rèn)為亮色
.autoDarkModeEnable(true) //自動(dòng)狀態(tài)欄字體和導(dǎo)航欄圖標(biāo)變色,必須指定狀態(tài)欄顏色和導(dǎo)航欄顏色才可以自動(dòng)變色哦
.autoStatusBarDarkModeEnable(true,0.2f) //自動(dòng)狀態(tài)欄字體變色击吱,必須指定狀態(tài)欄顏色才可以自動(dòng)變色哦
.autoNavigationBarDarkModeEnable(true,0.2f) //自動(dòng)導(dǎo)航欄圖標(biāo)變色淋淀,必須指定導(dǎo)航欄顏色才可以自動(dòng)變色哦
.flymeOSStatusBarFontColor(R.color.btn3) //修改flyme OS狀態(tài)欄字體顏色
.fullScreen(true) //有導(dǎo)航欄的情況下,activity全屏顯示覆醇,也就是activity最下面被導(dǎo)航欄覆蓋朵纷,不寫默認(rèn)非全屏
.hideBar(BarHide.FLAG_HIDE_BAR) //隱藏狀態(tài)欄或?qū)Ш綑诨騼烧撸粚懩J(rèn)不隱藏
.addViewSupportTransformColor(toolbar) //設(shè)置支持view變色永脓,可以添加多個(gè)view袍辞,不指定顏色,默認(rèn)和狀態(tài)欄同色常摧,還有兩個(gè)重載方法
.titleBar(view) //解決狀態(tài)欄和布局重疊問題搅吁,任選其一
.titleBarMarginTop(view) //解決狀態(tài)欄和布局重疊問題威创,任選其一
.statusBarView(view) //解決狀態(tài)欄和布局重疊問題锯厢,任選其一
.fitsSystemWindows(true) //解決狀態(tài)欄和布局重疊問題佣盒,任選其一陈症,默認(rèn)為false瓶籽,當(dāng)為true時(shí)一定要指定statusBarColor(),不然狀態(tài)欄為透明色萤捆,還有一些重載方法
.supportActionBar(true) //支持ActionBar使用
.statusBarColorTransform(R.color.orange) //狀態(tài)欄變色后的顏色
.navigationBarColorTransform(R.color.orange) //導(dǎo)航欄變色后的顏色
.barColorTransform(R.color.orange) //狀態(tài)欄和導(dǎo)航欄變色后的顏色
.removeSupportView(toolbar) //移除指定view支持
.removeSupportAllView() //移除全部view支持
.navigationBarEnable(true) //是否可以修改導(dǎo)航欄顏色兼贸,默認(rèn)為true
.navigationBarWithKitkatEnable(true) //是否可以修改安卓4.4和emui3.x手機(jī)導(dǎo)航欄顏色晰绎,默認(rèn)為true
.navigationBarWithEMUI3Enable(true) //是否可以修改emui3.x手機(jī)導(dǎo)航欄顏色寞奸,默認(rèn)為true
.keyboardEnable(true) //解決軟鍵盤與底部輸入框沖突問題,默認(rèn)為false在跳,還有一個(gè)重載方法枪萄,可以指定軟鍵盤mode
.keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) //單獨(dú)指定軟鍵盤模式
.setOnKeyboardListener(new OnKeyboardListener() { //軟鍵盤監(jiān)聽回調(diào),keyboardEnable為true才會(huì)回調(diào)此方法
@Override
public void onKeyboardChange(boolean isPopup, int keyboardHeight) {
LogUtils.e(isPopup); //isPopup為true猫妙,軟鍵盤彈出瓷翻,為false,軟鍵盤關(guān)閉
}
})
.setOnNavigationBarListener(onNavigationBarListener) //導(dǎo)航欄顯示隱藏監(jiān)聽割坠,目前只支持華為和小米手機(jī)
.setOnBarListener(OnBarListener) //第一次調(diào)用和橫豎屏切換都會(huì)觸發(fā)齐帚,可以用來做劉海屏遮擋布局控件的問題
.addTag("tag") //給以上設(shè)置的參數(shù)打標(biāo)記
.getTag("tag") //根據(jù)tag獲得沉浸式參數(shù)
.reset() //重置所以沉浸式參數(shù)
.init(); //必須調(diào)用方可應(yīng)用以上所配置的參數(shù)
混淆規(guī)則
-keep class com.gyf.immersionbar.* {*;}
-dontwarn com.gyf.immersionbar.**
這個(gè)混淆規(guī)則是加在3.0.0
以下的版本,3.0.0
以上不用彼哼。