[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-4076":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":34,"readmeContent":35,"aiSummary":36,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},4076,"ImmersionBar","gyf-dev\u002FImmersionBar","gyf-dev","android 4.4以上沉浸式状态栏和沉浸式导航栏管理，适配横竖屏切换、刘海屏、软键盘弹出等问题，可以修改状态栏字体颜色和导航栏图标颜色，以及不可修改字体颜色手机的适配，适用于Activity、Fragment、DialogFragment、Dialog，PopupWindow，一句代码轻松实现，以及对bar的其他设置，详见README。简书请参考：http:\u002F\u002Fwww.jianshu.com\u002Fp\u002F2a884e211a62","",null,"Java",11456,1916,176,133,0,1,4,70.75,"Apache License 2.0",false,"master",true,[25,26,27,28,29,30,31,32,33],"android","bar","dialog","immersion","kotlin","navigation","navigationbar","status","statusbar","2026-06-12 04:00:21","![logo](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002Freadme_head.png)\n# ImmersionBar -- android 4.4以上沉浸式实现 \n[![version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fversion-3.2.2-brightgreen.svg)](https:\u002F\u002Fbintray.com\u002Fgeyifeng\u002Fmaven\u002Fimmersionbar) [![author](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fauthor-gyf--dev-orange.svg)](https:\u002F\u002Fgithub.com\u002Fgyf-dev) [![简书](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F%E7%AE%80%E4%B9%A6-HeLe%E5%B0%8F%E5%AD%90%E6%8B%BD-blue.svg)](https:\u002F\u002Fwww.jianshu.com\u002Fp\u002F2a884e211a62) [![QQ群](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FQQ%E7%BE%A4-314360549-red.svg)]()\n\n## 直接看效果图，建议下载demo体验，最下面有各个版本的效果图\n\u003Cimg width=\"300\"  src=\"https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FScreenshot_6.0.gif\"\u002F>\n\n## 使用（gyf替换为geyifeng） \n> 3.1.1以上版本(mavenCentral)\n   ```groovy\n   \u002F\u002F 基础依赖包，必须要依赖\n   implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'\n   \u002F\u002F kotlin扩展（可选）\n   implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.2'\n   \u002F\u002F fragment快速实现（可选）已废弃\n   implementation 'com.geyifeng.immersionbar:immersionbar-components:3.2.2'\n   ```\n> 3.0.0版本(jcenter)\n   ```groovy\n   \u002F\u002F 基础依赖包，必须要依赖\n   implementation 'com.gyf.immersionbar:immersionbar:3.0.0'\n   \u002F\u002F kotlin扩展（可选）\n   implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0'\n   \u002F\u002F fragment快速实现（可选）\n   implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0'\n   ```\n\n## 版本说明\n#### [点我查看版本说明](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fwiki)\n\n## 下载demo \n#### [点我下载immersionBar-3.2.2.apk](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fapk\u002Fimmersionbar-3.2.2.apk)\n\n## 关于全面屏与刘海\n#### 关于全面屏\n   在manifest加入如下配置，四选其一，或者都写\n\n   ① 升级targetSdkVersion为25以上版本，现在基本都是25以上了，所以以下三个没有必要配置了\n\n   ② 在manifest的Application节点中加入\n   ```xml\n      android:resizeableActivity=\"true\"\n   ```\n   ③ 在manifest的Application节点中加入\n   ```xml\n      android:maxAspectRatio=\"2.4\"\n   ```\n   ④ 在manifest的Application节点下加入\n   ```xml\n      \u003Cmeta-data \n        android:name=\"android.max_aspect\"\n        android:value=\"2.4\" \u002F>\n   ```\n\n#### 关于刘海屏 \n  在manifest的Application节点下加入，vivo和oppo没有找到相关配置信息\n   ```xml\n      \u003C!--适配华为（huawei）刘海屏-->\n      \u003Cmeta-data \n        android:name=\"android.notch_support\" \n        android:value=\"true\"\u002F>\n      \u003C!--适配小米（xiaomi）刘海屏-->\n      \u003Cmeta-data\n        android:name=\"notch.config\"\n        android:value=\"portrait|landscape\" \u002F>\n   ```\n  \n## Api详解\n- 基础用法\n\n    ```java\n    ImmersionBar.with(this).init();\n    ```\n- 高级用法(每个参数的意义)\n\n    ```java\n     ImmersionBar.with(this)\n                 .transparentStatusBar()  \u002F\u002F透明状态栏，不写默认透明色\n                 .transparentNavigationBar()  \u002F\u002F透明导航栏，不写默认黑色(设置此方法，fullScreen()方法自动为true)\n                 .transparentBar()             \u002F\u002F透明状态栏和导航栏，不写默认状态栏为透明色，导航栏为黑色（设置此方法，fullScreen()方法自动为true）\n                 .statusBarColor(R.color.colorPrimary)     \u002F\u002F状态栏颜色，不写默认透明色\n                 .navigationBarColor(R.color.colorPrimary) \u002F\u002F导航栏颜色，不写默认黑色\n                 .barColor(R.color.colorPrimary)  \u002F\u002F同时自定义状态栏和导航栏颜色，不写默认状态栏为透明色，导航栏为黑色\n                 .statusBarAlpha(0.3f)  \u002F\u002F状态栏透明度，不写默认0.0f\n                 .navigationBarAlpha(0.4f)  \u002F\u002F导航栏透明度，不写默认0.0F\n                 .barAlpha(0.3f)  \u002F\u002F状态栏和导航栏透明度，不写默认0.0f\n                 .statusBarDarkFont(true)   \u002F\u002F状态栏字体是深色，不写默认为亮色\n                 .navigationBarDarkIcon(true) \u002F\u002F导航栏图标是深色，不写默认为亮色\n                 .autoDarkModeEnable(true) \u002F\u002F自动状态栏字体和导航栏图标变色，必须指定状态栏颜色和导航栏颜色才可以自动变色哦\n                 .autoStatusBarDarkModeEnable(true,0.2f) \u002F\u002F自动状态栏字体变色，必须指定状态栏颜色才可以自动变色哦\n                 .autoNavigationBarDarkModeEnable(true,0.2f) \u002F\u002F自动导航栏图标变色，必须指定导航栏颜色才可以自动变色哦\n                 .flymeOSStatusBarFontColor(R.color.btn3)  \u002F\u002F修改flyme OS状态栏字体颜色\n                 .fullScreen(true)      \u002F\u002F有导航栏的情况下，activity全屏显示，也就是activity最下面被导航栏覆盖，不写默认非全屏\n                 .hideBar(BarHide.FLAG_HIDE_BAR)  \u002F\u002F隐藏状态栏或导航栏或两者，不写默认不隐藏\n                 .addViewSupportTransformColor(toolbar)  \u002F\u002F设置支持view变色，可以添加多个view，不指定颜色，默认和状态栏同色，还有两个重载方法\n                 .titleBar(view)    \u002F\u002F解决状态栏和布局重叠问题，任选其一\n                 .titleBarMarginTop(view)     \u002F\u002F解决状态栏和布局重叠问题，任选其一\n                 .statusBarView(view)  \u002F\u002F解决状态栏和布局重叠问题，任选其一\n                 .fitsSystemWindows(true)    \u002F\u002F解决状态栏和布局重叠问题，任选其一，默认为false，当为true时一定要指定statusBarColor()，不然状态栏为透明色，还有一些重载方法\n                 .supportActionBar(true) \u002F\u002F支持ActionBar使用\n                 .statusBarColorTransform(R.color.orange)  \u002F\u002F状态栏变色后的颜色\n                 .navigationBarColorTransform(R.color.orange) \u002F\u002F导航栏变色后的颜色\n                 .barColorTransform(R.color.orange)  \u002F\u002F状态栏和导航栏变色后的颜色\n                 .removeSupportView(toolbar)  \u002F\u002F移除指定view支持\n                 .removeSupportAllView() \u002F\u002F移除全部view支持\n                 .navigationBarEnable(true)   \u002F\u002F是否可以修改导航栏颜色，默认为true\n                 .navigationBarWithKitkatEnable(true)  \u002F\u002F是否可以修改安卓4.4和emui3.x手机导航栏颜色，默认为true\n                 .navigationBarWithEMUI3Enable(true) \u002F\u002F是否可以修改emui3.x手机导航栏颜色，默认为true\n                 .keyboardEnable(true)  \u002F\u002F解决软键盘与底部输入框冲突问题，默认为false，还有一个重载方法，可以指定软键盘mode\n                 .keyboardMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)  \u002F\u002F单独指定软键盘模式\n                 .setOnKeyboardListener(new OnKeyboardListener() {    \u002F\u002F软键盘监听回调，keyboardEnable为true才会回调此方法\n                       @Override\n                       public void onKeyboardChange(boolean isPopup, int keyboardHeight) {\n                           LogUtils.e(isPopup);  \u002F\u002FisPopup为true，软键盘弹出，为false，软键盘关闭\n                       }\n                  })\n                 .setOnNavigationBarListener(onNavigationBarListener) \u002F\u002F导航栏显示隐藏监听，目前只支持华为和小米手机\n                 .setOnBarListener(OnBarListener) \u002F\u002F第一次调用和横竖屏切换都会触发，可以用来做刘海屏遮挡布局控件的问题\n                 .addTag(\"tag\")  \u002F\u002F给以上设置的参数打标记\n                 .getTag(\"tag\")  \u002F\u002F根据tag获得沉浸式参数\n                 .reset()  \u002F\u002F重置所以沉浸式参数\n                 .init();  \u002F\u002F必须调用方可应用以上所配置的参数\n    ```\n## 在Activity中实现沉浸式\n\n- java用法\n\n   ```java\n    ImmersionBar.with(this).init();\n   ```\n- kotlin用法\n \n   ```kotlin\n    immersionBar {\n        statusBarColor(R.color.colorPrimary) \n        navigationBarColor(R.color.colorPrimary)\n    }\n   ```\n  \n\n## 在Fragment中实现沉浸式\n\n#### 在Fragment使用ImmersionBar\n  - 第一种，fragment如果配合viewpager2使用的话，并且使用了Behavior指定了BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT，直接在fragment的onResume里直接实现沉浸式\n  - 第二种，当使用show()和hide()来控制Fragment显示隐藏的时候，直接在fragment的onResume与onHiddenChanged（参数hidden为false）方法里实现沉浸式\n  - ~~第三种（废弃），你的Fragment直接继承[SimpleImmersionFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FSimpleImmersionFragment.java)或者[ImmersionFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FImmersionFragment.java)类，在initImmersionBar方法中实现沉浸式代码，只有当immersionBarEnabled返回为true才可以走initImmersionBar方法哦，不过immersionBarEnabled默认返回已经为true了，如果当前Fragment不想走沉浸式方法，请将immersionBarEnabled设置为false~~\n  - ~~第四种（废弃），如果你的Fragment不能继承[SimpleImmersionFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FSimpleImmersionFragment.java)或者[ImmersionFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FImmersionFragment.java)类，请参考[SimpleImmersionFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FSimpleImmersionFragment.java)实现[SimpleImmersionOwner](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FSimpleImmersionOwner.java)接口，或者参考[ImmersionFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FImmersionFragment.java)实现[ImmersionOwner](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-components\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fcomponents\u002FImmersionOwner.java)接口~~\n    \n#### 在Activity使用ImmersionBar\n  - 第一种，当结合viewpager2使用的时候，请使用viewpager2的registerOnPageChangeCallback的方法监听沉浸式\n  - 第二种，当结合viewpager使用的时候，请使用viewpager的addOnPageChangeListener的方法监听沉浸式，参考demo中[FragmentThreeActivity](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Ftree\u002Fmaster\u002Fimmersionbar-sample\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fsample\u002Factivity\u002FFragmentThreeActivity.java)这个类\n  - 第三种，当使用show()和hide()来控制Fragment显示隐藏的时候，请在tab切换的时候使用ImmersionBar，参考demo中[FragmentFourActivity](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Ftree\u002Fmaster\u002Fimmersionbar-sample\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fsample\u002Factivity\u002FFragmentFourActivity.java)这个类\n\n#### 使用Fragment第三方框架[Fragmentation](https:\u002F\u002Fgithub.com\u002FYoKeyword\u002FFragmentation)实现沉浸式\n  - 参考demo中[FragmentFiveActivity](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fblob\u002Fmaster\u002Fimmersionbar-sample\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fsample\u002Factivity\u002FFragmentFiveActivity.java)和[BaseFiveFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Ftree\u002Fmaster\u002Fimmersionbar-sample\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fsample\u002Ffragment\u002Ffive\u002FBaseFiveFragment.java)这个类\n\n## 在Dialog中实现沉浸式，具体实现参考demo\n- ①结合dialogFragment使用，可以参考demo中的[BaseDialogFragment](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Ftree\u002Fmaster\u002Fimmersionbar-sample\u002Fsrc\u002Fmain\u002Fjava\u002Fcom\u002Fgyf\u002Fimmersionbar\u002Fsample\u002Ffragment\u002Fdialog\u002FBaseDialogFragment.java)这个类\n   ```java\n       ImmersionBar.with(this).init();\n   ```\n- ②其他dialog，关闭dialog的时候必须调用销毁方法\n    ```java\n        ImmersionBar.with(this, dialog).init();\n    ```\n    销毁方法：\n    \n    java中\n    ```java\n        ImmersionBar.destroy(this, dialog);\n    ```\n    kotlin中\n    ```kotlin\n        destroyImmersionBar(dialog)\n    ```\n   \n\u003Cimg width=\"300\"  src=\"https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FScreenshot_dialog.gif\"\u002F>\n\n## 在PopupWindow中实现沉浸式，具体实现参考demo\n   重点是调用以下方法，但是此方法会导致有导航栏的手机底部布局会被导航栏覆盖，还有底部输入框无法根据软键盘弹出而弹出，具体适配请参考demo。\n   ```java\n       popupWindow.setClippingEnabled(false);\n   ```\n\n## 状态栏与布局顶部重叠解决方案，六种方案根据不同需求任选其一\n- ① 使用dimen自定义状态栏高度，不建议使用，因为设备状态栏高度并不是固定的\n\n    在values-v19\u002Fdimens.xml文件下\n    ```xml\n        \u003Cdimen name=\"status_bar_height\">25dp\u003C\u002Fdimen>\n     ```\n    \n    在values\u002Fdimens.xml文件下     \n    ```xml\n        \u003Cdimen name=\"status_bar_height\">0dp\u003C\u002Fdimen>\n    ```\n    \n    然后在布局界面添加view标签，高度指定为status_bar_height\n    ```xml\n       \u003CLinearLayout xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n           xmlns:app=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres-auto\"\n           android:layout_width=\"match_parent\"\n           android:layout_height=\"match_parent\"\n           android:background=\"@color\u002Fdarker_gray\"\n           android:orientation=\"vertical\">\n       \n           \u003CView\n               android:layout_width=\"match_parent\"\n               android:layout_height=\"@dimen\u002Fstatus_bar_height\"\n               android:background=\"@color\u002FcolorPrimary\" \u002F>\n       \n           \u003Candroid.support.v7.widget.Toolbar\n               android:layout_width=\"match_parent\"\n               android:layout_height=\"wrap_content\"\n               android:background=\"@color\u002FcolorPrimary\"\n               app:title=\"方法一\"\n               app:titleTextColor=\"@android:color\u002Fwhite\" \u002F>\n       \u003C\u002FLinearLayout>\n    ```\n  \n- ② 使用系统的fitsSystemWindows属性，使用该属性不会导致输入框与软键盘冲突问题，不要再Fragment使用该属性，只适合纯色状态栏\n\n   ```xml\n       \u003CLinearLayout xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n           android:layout_width=\"match_parent\"\n           android:layout_height=\"match_parent\"\n           android:orientation=\"vertical\"\n           android:fitsSystemWindows=\"true\">\n       \u003C\u002FLinearLayout>\n   ```\n   然后使用ImmersionBar时候必须指定状态栏颜色\n   ```java\n       ImmersionBar.with(this)\n            .statusBarColor(R.color.colorPrimary)\n            .init();\n   ```\n   - 注意：ImmersionBar一定要在设置完布局以后使用，\n\n- ③ 使用ImmersionBar的fitsSystemWindows(boolean fits)方法，只适合纯色状态栏\n\n    ```java\n        ImmersionBar.with(this)\n            .fitsSystemWindows(true)  \u002F\u002F使用该属性,必须指定状态栏颜色\n            .statusBarColor(R.color.colorPrimary)\n            .init();\n    ```\n- ④ 使用ImmersionBar的statusBarView(View view)方法，可以用来适配渐变色状态栏、侧滑返回\n\n    在标题栏的上方增加View标签，高度指定为0dp\n    ```xml\n        \u003CLinearLayout xmlns:android=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres\u002Fandroid\"\n               xmlns:app=\"http:\u002F\u002Fschemas.android.com\u002Fapk\u002Fres-auto\"\n               android:layout_width=\"match_parent\"\n               android:layout_height=\"match_parent\"\n               android:background=\"@color\u002Fdarker_gray\"\n               android:orientation=\"vertical\">\n           \n               \u003CView\n                   android:layout_width=\"match_parent\"\n                   android:layout_height=\"0dp\"\n                   android:background=\"@color\u002FcolorPrimary\" \u002F>\n           \n               \u003Candroid.support.v7.widget.Toolbar\n                   android:layout_width=\"match_parent\"\n                   android:layout_height=\"wrap_content\"\n                   android:background=\"@color\u002FcolorPrimary\"\n                   app:title=\"方法四\"\n                   app:titleTextColor=\"@android:color\u002Fwhite\" \u002F>\n        \u003C\u002FLinearLayout>\n     ```\n      \n    然后使用ImmersionBar的statusBarView方法，指定view就可以啦\n    ```java\n         ImmersionBar.with(this)\n               .statusBarView(view)\n               .init();\n         \u002F\u002F或者\n         \u002F\u002FImmersionBar.setStatusBarView(this,view);\n     ```   \n- ⑤ 使用ImmersionBar的titleBar(View view)方法，原理是设置paddingTop，可以用来适配渐变色状态栏、侧滑返回\n    ```java\n             ImmersionBar.with(this)\n                   .titleBar(view) \u002F\u002F可以为任意view，如果是自定义xml实现标题栏的话，标题栏根节点不能为RelativeLayout或者ConstraintLayout，以及其子类\n                   .init();\n             \u002F\u002F或者\n             \u002F\u002FImmersionBar.setTitleBar(this, view);\n     ```\n- ⑥ 使用ImmersionBar的titleBarMarginTop(View view)方法，原理是设置marginTop，只适合纯色状态栏\n    ```java\n             ImmersionBar.with(this)\n                   .titleBarMarginTop(view)  \u002F\u002F可以为任意view\n                   .statusBarColor(R.color.colorPrimary)  \u002F\u002F指定状态栏颜色,根据情况是否设置\n                   .init();\n             \u002F\u002F或者使用静态方法设置\n             \u002F\u002FImmersionBar.setTitleBarMarginTop(this,view);\n     ```\n       \n## 解决EditText和软键盘的问题\n\n - 第一种方案\n   ```java\n       ImmersionBar.with(this)\n                   .keyboardEnable(true)  \u002F\u002F解决软键盘与底部输入框冲突问题\n               \u002F\u002F  .keyboardEnable(true, WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE\n               \u002F\u002F                        | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)  \u002F\u002F软键盘自动弹出\n                   .init();\n   ```\n - 第二种方案\n   不使用keyboardEnable方法，只需要在布局的根节点（最外层节点）加上android:fitsSystemWindows=\"true\"属性即可，只适合纯色状态栏\n    \n\u003Cimg width=\"300\"  src=\"https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FScreenshot_edit.gif\"\u002F>\n\n## 当白色背景状态栏遇到不能改变状态栏字体为深色的设备时，解决方案\n   ```java\n         ImmersionBar.with(this)\n                     .statusBarDarkFont(true, 0.2f) \u002F\u002F原理：如果当前设备支持状态栏字体变色，会设置状态栏字体为黑色，如果当前设备不支持状态栏字体变色，会使当前状态栏加上透明度，否则不执行透明度\n                     .init();\n   ```\n\u003Cimg width=\"300\"  src=\"https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FwhiteStatusBar.png\"\u002F>\n    \n## 状态栏和导航栏其它方法\n\t\n- public static boolean hasNavigationBar(Activity activity)\n \n    判断是否存在导航栏\n    \n- public static int getNavigationBarHeight(Activity activity)\n \n    获得导航栏的高度\n \n- public static int getNavigationBarWidth(Activity activity)\n \n    获得导航栏的宽度\n    \n- public static boolean isNavigationAtBottom(Activity activity)\n \n    判断导航栏是否在底部\n    \n- public static int getStatusBarHeight(Activity activity)\n \n    获得状态栏的高度\n    \n- public static int getActionBarHeight(Activity activity)\n \n    获得ActionBar的高度\n\n- public static boolean hasNotchScreen(Activity activity)\n \n    是否是刘海屏\n    \n- public static boolean getNotchHeight(Activity activity)\n \n    获得刘海屏高度\n    \n- public static boolean isSupportStatusBarDarkFont()\n \n    判断当前设备支不支持状态栏字体设置为黑色\n\n- public static boolean isSupportNavigationIconDark()\n \n    判断当前设备支不支持导航栏图标设置为黑色\n\n- public static void hideStatusBar(Window window) \n \n    隐藏状态栏\n    \n    \n## 混淆规则(proguard-rules.pro)\n#### 3.1.1以上版本无需混淆\n#### 3.0.0以下版本混淆规制\n   ```\n    -keep class com.gyf.immersionbar.* {*;} \n    -dontwarn com.gyf.immersionbar.**\n   ```\n   \n## 问题汇总\n#### 点我[问题汇总](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FImmersionBar\u002Fwiki\u002Fquestions)\n    \n\n## 效果图 ##\n#### 说明 ####\n- 这是状态栏\n![image](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FStatusBar.png)\n- 这是导航栏（有些手机没有导航栏）\n![image](https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FNavigationBar.png)\n#### 动态图 ####\n- android 6.0 有导航栏效果\n\u003Cimg width=\"300\"  src=\"https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FScreenshot_6.0.gif\"\u002F>\n\n- android 4.4 有导航栏效果\n\u003Cimg width=\"300\"  src=\"https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FScreenshot_4.4.gif\"\u002F>\n\n- android 4.4 没有导航栏效果\n\u003Cimg width=\"300\"  src=\"https:\u002F\u002Fgithub.com\u002Fgyf-dev\u002FScreenshots\u002Fblob\u002Fmaster\u002FImmersionBar\u002FScreenshot_4.4_no.gif\"\u002F>\n\n## 特别鸣谢 ##\n* 感谢[zhangzhen92](https:\u002F\u002Fgithub.com\u002Fzhangzhen92)、 [yutouxiansheng](https:\u002F\u002Fgithub.com\u002Fyutouxiansheng) 、[MrWhhh](https:\u002F\u002Fgithub.com\u002FMrWhhh)提供测试\n\n## 联系我 ##\n- QQ群 314360549（问题交流）","ImmersionBar 是一个用于 Android 4.4 及以上版本的沉浸式状态栏和导航栏管理库。它支持横竖屏切换、刘海屏适配以及软键盘弹出等场景，能够修改状态栏字体颜色和导航栏图标颜色，并且兼容无法修改字体颜色的手机。适用于 Activity、Fragment、DialogFragment、Dialog 和 PopupWindow 等多种界面组件，只需一句代码即可轻松实现沉浸效果。此外，该项目还提供了丰富的 API 以满足开发者对状态栏和导航栏的其他自定义需求。简书上有详细的使用教程可供参考。",2,"2026-06-11 02:58:17","top_language"]