gyf-dev / ImmersionBar

android 4.4以上沉浸式状态栏和沉浸式导航栏管理,适配横竖屏切换、刘海屏、软键盘弹出等问题,可以修改状态栏字体颜色和导航栏图标颜色,以及不可修改字体颜色手机的适配,适用于Activity、Fragment、DialogFragment、Dialog,PopupWindow,一句代码轻松实现,以及对bar的其他设置,详见README。简书请参考:http://www.jianshu.com/p/2a884e211a62
Apache License 2.0
11.31k stars 1.89k forks source link
android bar dialog immersion kotlin navigation navigationbar status statusbar

logo

ImmersionBar -- android 4.4以上沉浸式实现

version author 简书 [QQ群]()

直接看效果图,建议下载demo体验,最下面有各个版本的效果图

使用(gyf替换为geyifeng)

3.1.1以上版本(mavenCentral)

// 基础依赖包,必须要依赖
implementation 'com.geyifeng.immersionbar:immersionbar:3.2.2'
// kotlin扩展(可选)
implementation 'com.geyifeng.immersionbar:immersionbar-ktx:3.2.2'
// fragment快速实现(可选)已废弃
implementation 'com.geyifeng.immersionbar:immersionbar-components:3.2.2'

3.0.0版本(jcenter)

// 基础依赖包,必须要依赖
implementation 'com.gyf.immersionbar:immersionbar:3.0.0'
// kotlin扩展(可选)
implementation 'com.gyf.immersionbar:immersionbar-ktx:3.0.0'
// fragment快速实现(可选)
implementation 'com.gyf.immersionbar:immersionbar-components:3.0.0'

版本说明

点我查看版本说明

下载demo

点我下载immersionBar-3.2.2.apk

关于全面屏与刘海

关于全面屏

在manifest加入如下配置,四选其一,或者都写

① 升级targetSdkVersion为25以上版本,现在基本都是25以上了,所以以下三个没有必要配置了

② 在manifest的Application节点中加入

      android:resizeableActivity="true"

③ 在manifest的Application节点中加入

      android:maxAspectRatio="2.4"

④ 在manifest的Application节点下加入

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

关于刘海屏

在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" />

Api详解

在Fragment中实现沉浸式

在Fragment使用ImmersionBar

在Activity使用ImmersionBar

使用Fragment第三方框架Fragmentation实现沉浸式

在Dialog中实现沉浸式,具体实现参考demo

在PopupWindow中实现沉浸式,具体实现参考demo

重点是调用以下方法,但是此方法会导致有导航栏的手机底部布局会被导航栏覆盖,还有底部输入框无法根据软键盘弹出而弹出,具体适配请参考demo。

       popupWindow.setClippingEnabled(false);

状态栏与布局顶部重叠解决方案,六种方案根据不同需求任选其一

解决EditText和软键盘的问题

当白色背景状态栏遇到不能改变状态栏字体为深色的设备时,解决方案

         ImmersionBar.with(this)
                     .statusBarDarkFont(true, 0.2f) //原理:如果当前设备支持状态栏字体变色,会设置状态栏字体为黑色,如果当前设备不支持状态栏字体变色,会使当前状态栏加上透明度,否则不执行透明度
                     .init();

状态栏和导航栏其它方法

混淆规则(proguard-rules.pro)

3.1.1以上版本无需混淆

3.0.0以下版本混淆规制

    -keep class com.gyf.immersionbar.* {*;} 
    -dontwarn com.gyf.immersionbar.**

问题汇总

点我问题汇总

效果图

说明

特别鸣谢

联系我