1. 程式人生 > >android -------- 沈浸式狀態欄和沈浸式導航欄(ImmersionBar)

android -------- 沈浸式狀態欄和沈浸式導航欄(ImmersionBar)

適用於 自動 blank nag tran input androi color nconf

android 4.4以上沈浸式狀態欄和沈浸式導航欄管理,包括狀態欄字體顏色,適用於Activity、Fragment、DialogFragment、Dialog,並且適配劉海屏,適配軟鍵盤彈出等問題

ImmersionBar -- android 4.4以上沈浸式實現

直接看效果圖,最下面有各個版本的效果圖

技術分享圖片

android studio 引入依賴

implementation ‘com.gyf.immersionbar:immersionbar:2.3.3‘

eclipse

immersionbar-2.3.3.aar

關於使用AndroidX支持庫

  • 如果你的項目中使用了AndroidX支持庫,請在你的gradle.properties加入如下配置,如果已經配置了,請忽略
       android.useAndroidX=true
       android.enableJetifier=true

關於全面屏與劉海

關於全面屏

在manifest加入如下配置,四選其一,或者都寫

① 在manifest的Application節點下加入

  <meta-data 
     android:name="android.max_aspect"
     android:value="2.4"
/>

② 在manifest的Application節點中加入

 android:resizeableActivity="true"

③ 在manifest的Application節點中加入

android:maxAspectRatio="2.4"

④ 升級targetSdkVersion為25以上版本

關於劉海屏

在manifest的Application節點下加入,vivo和oppo沒有找到相關配置信息

 <!--適配華為(huawei)劉海屏-->
   <meta-data 
     android:name="android.notch_support"
android:value="true"/> <!--適配小米(xiaomi)劉海屏--> <meta-data android:name="notch.config" android:value="portrait|landscape" />

使用

基礎用法,建議在BaseActivity裏調用

 public class BaseActivity extends AppCompatActivity {
  
         @Override
         protected void onCreate(@Nullable Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             // 所有子類都將繼承這些相同的屬性,請在設置界面之後設置
             ImmersionBar.with(this).init();  
         }
     
         @Override
         protected void onDestroy() {
             super.onDestroy();
             // 必須調用該方法,防止內存泄漏
             ImmersionBar.with(this).destroy();  
         }
       
        @Override
         protected void onConfigurationChanged(Configuration newConfig) {
             super.onConfigurationChanged(newConfig);
             // 如果你的app可以橫豎屏切換,並且適配4.4或者emui3手機請務必在onConfigurationChanged方法裏添加這句話
             ImmersionBar.with(this).init();   
         }
     }

高級用法(每個參數的意義)

 ImmersionBar.with(this)
             .transparentStatusBar()  //透明狀態欄,不寫默認透明色
             .transparentNavigationBar()  //透明導航欄,不寫默認黑色(設置此方法,fullScreen()方法自動為true)
             .transparentBar()             //透明狀態欄和導航欄,不寫默認狀態欄為透明色,導航欄為黑色(設置此方法,fullScreen()方法自動為true)
             .statusBarColor(R.color.colorPrimary)     //狀態欄顏色,不寫默認透明色
             .navigationBarColor(R.color.colorPrimary) //導航欄顏色,不寫默認黑色
             .barColor(R.color.colorPrimary)  //同時自定義狀態欄和導航欄顏色,不寫默認狀態欄為透明色,導航欄為黑色
             .statusBarAlpha(0.3f)  //狀態欄透明度,不寫默認0.0f
             .navigationBarAlpha(0.4f)  //導航欄透明度,不寫默認0.0F
             .barAlpha(0.3f)  //狀態欄和導航欄透明度,不寫默認0.0f
             .statusBarDarkFont(true)   //狀態欄字體是深色,不寫默認為亮色
             .navigationBarDarkIcon(true) //導航欄圖標是深色,不寫默認為亮色
             .autoDarkModeEnable(true) //自動狀態欄字體和導航欄圖標變色,必須指定狀態欄顏色和導航欄顏色才可以自動變色哦
             .autoStatusBarDarkModeEnable(true,0.2f) //自動狀態欄字體變色,必須指定狀態欄顏色才可以自動變色哦
             .autoNavigationBarDarkModeEnable(true,0.2f) //自動導航欄圖標變色,必須指定導航欄顏色才可以自動變色哦
             .flymeOSStatusBarFontColor(R.color.btn3)  //修改flyme OS狀態欄字體顏色
             .fullScreen(true)      //有導航欄的情況下,activity全屏顯示,也就是activity最下面被導航欄覆蓋,不寫默認非全屏
             .hideBar(BarHide.FLAG_HIDE_BAR)  //隱藏狀態欄或導航欄或兩者,不寫默認不隱藏
             .addViewSupportTransformColor(toolbar)  //設置支持view變色,可以添加多個view,不指定顏色,默認和狀態欄同色,還有兩個重載方法
             .titleBar(view)    //解決狀態欄和布局重疊問題,任選其一
             .titleBarMarginTop(view)     //解決狀態欄和布局重疊問題,任選其一
             .statusBarView(view)  //解決狀態欄和布局重疊問題,任選其一
             .fitsSystemWindows(true)    //解決狀態欄和布局重疊問題,任選其一,默認為false,當為true時一定要指定statusBarColor(),不然狀態欄為透明色,還有一些重載方法
             .supportActionBar(true) //支持ActionBar使用
             .statusBarColorTransform(R.color.orange)  //狀態欄變色後的顏色
             .navigationBarColorTransform(R.color.orange) //導航欄變色後的顏色
             .barColorTransform(R.color.orange)  //狀態欄和導航欄變色後的顏色
             .removeSupportView(toolbar)  //移除指定view支持
             .removeSupportAllView() //移除全部view支持
             .navigationBarEnable(true)   //是否可以修改導航欄顏色,默認為true
             .navigationBarWithKitkatEnable(true)  //是否可以修改安卓4.4和emui3.1手機導航欄顏色,默認為true
             .fixMarginAtBottom(true)   //已過時,當xml裏使用android:fitsSystemWindows="true"屬性時,解決4.4和emui3.1手機底部有時會出現多余空白的問題,默認為false,非必須
             .addTag("tag")  //給以上設置的參數打標記
             .getTag("tag")  //根據tag獲得沈浸式參數
             .reset()  //重置所以沈浸式參數
             .keyboardEnable(true)  //解決軟鍵盤與底部輸入框沖突問題,默認為false,還有一個重載方法,可以指定軟鍵盤mode
             .keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)  //單獨指定軟鍵盤模式
             .setOnKeyboardListener(new OnKeyboardListener() {    //軟鍵盤監聽回調
                   @Override
                   public void onKeyboardChange(boolean isPopup, int keyboardHeight) {
                       LogUtils.e(isPopup);  //isPopup為true,軟鍵盤彈出,為false,軟鍵盤關閉
                   }
              })
             .init();  //必須調用方可沈浸式

關閉銷毀

在activity的onDestroy方法中執行

ImmersionBar.with(this).destroy(); //必須調用該方法,防止內存泄漏

更多詳細請看信息

github地址:https://github.com/gyf-dev/ImmersionBar

android -------- 沈浸式狀態欄和沈浸式導航欄(ImmersionBar)