ImmersionBar README

The project's README from github.com/gyf-dev/ImmersionBar. As one markdown file: README.md.

logo

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

version author 简书 QQ群

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

使用(gyf替换为geyifeng)

3.1.1以上版本(mavenCentral)

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

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.3.3.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详解

在Activity中实现沉浸式

在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.**

问题汇总

点我问题汇总

效果图

说明

动态图

特别鸣谢

联系我

感谢支持

Donate

ImmersionBar (gyf-dev/ImmersionBar)

Searching Database…

Что это такое?ImmersionBar — это библиотека для Android, которая управляет полноэкранными (во весь экран) строкой состояния и панелью навигации. С её помощью можно окрасить текст в строке состояния, поменять цвет значков панели навигации, а также обрабатывать поворот экрана, вырезы на экране и экранную клавиатуру, причём с минимальным количеством кода.
Это отдельное приложение или библиотека, которую я добавляю в свой проект?Это библиотека, которую вы добавляете как зависимость Gradle в существующее Android-приложение; это не самостоятельное приложение.
Как подключить её к моему проекту?Добавьте зависимость ImmersionBar из Maven Central для версий 3.1.1 и выше (или более старый артефакт JCenter для версии 3.0.0), затем вызовите её API одной строкой кода в Activity, Fragment, Dialog, DialogFragment или PopupWindow.
Нужно ли что-то особенное, чтобы её использовать?Достаточно обычного Android-проекта с целевым API 19 (Android 4.4) или выше; никакого дополнительного SDK или внешнего сервиса не требуется.
Работает ли она одинаково на всех устройствах?Нет: на некоторых устройствах нельзя сделать текст в строке состояния тёмным даже на белом фоне, для этого нужен отдельный обходной путь. Кроме того, один метод PopupWindow может привести к тому, что панель навигации перекроет нижний макет или помешает полю ввода подниматься при появлении клавиатуры.
Какие версии Android и типы экранов она поддерживает?Она рассчитана на Android 4.4 и новее и специально адаптируется к переключению между альбомной и книжной ориентацией, экранам с вырезами и распознаванию жестовой навигации.
Нужны ли особые правила ProGuard, если я включаю сжатие кода?Для версии 3.1.1 и выше дополнительные правила ProGuard не нужны; записи из proguard-rules.pro требуются только для версий ниже 3.1.1.
Можно ли проверить высоту или видимость панели навигации программно?Да, есть статические методы, например getNavigationBarHeight(), hasNavigationBar(), isNavigationAtBottom() и getBarProperties(), которые дают полную сводку о состоянии строки состояния и панели навигации.
Как не дать строке состояния перекрывать мой макет?В README описаны шесть подходов: от задания фиксированной высоты через dimen до использования fitsSystemWindows и собственных методов ImmersionBar statusBarView(), titleBar() и titleBarMarginTop().
Работает ли она внутри фрагментов, которые используются с ViewPager2?Да: если видимостью фрагмента управляет ViewPager2 с BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, вызывайте ImmersionBar напрямую в onResume(); другие варианты показа и скрытия фрагментов также описаны в демо.
Creator
gyf-dev
Size
326.6 MB
Stars
11.5K
Age
9y
Commits · 90 Days