false
当前位置:   article > 正文

Android 全面屏显示\沉浸式状态栏(黑条问题解决)_windowtranslucentnavigation

windowtranslucentnavigation

前言:

之前做项目为了达到全面屏显示,设置了一个theme主题样式,如下:

  <style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!--设置顶部状态栏是否为透明-->
        <item name="android:windowTranslucentStatus">false</item>

        <!--Android 5.x开始需要把颜色设置透明,否则顶部导航栏会呈现系统默认的浅灰色-->
        <item name="android:statusBarColor">@android:color/transparent</item>

        <!--设置顶部状态栏和底部导航栏是否为透明-->
        <item name="android:windowTranslucentNavigation">true</item>

        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>

        <item name="android:windowFullscreen">true</item>
    </style>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

但是在部分手机上会出现一个坑爹的现象:虽然状态栏隐藏了,但是原状态栏位置上会被黑条占领。(没错,就是在万恶的小米手机上出现了…)

解决方案:

方案1:在代码中设置

WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
            activity.getWindow().setAttributes(lp);
  • 1
  • 2
  • 3

方案2:在xml中设置theme

<style name="AppFullTheme" parent="AppTheme">
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
        <item name="android:windowFullscreen">true</item>
 </style>
  • 1
  • 2
  • 3
  • 4
  • 5

注解1: Android P版本为我们提供了解决方法,我们可以通过对Window设置layoutInDisplayCutoutMode来达到我们的目的,先来看一下layoutInDisplayCutoutMode的几种属性:

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT:默认情况下,全屏窗口不会使用到刘海区域,非全屏窗口可正常使用刘海区
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER:窗口不允许和刘海屏重叠
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES:该窗口始终允许延伸到屏幕短边上的DisplayCutout区域。

注解2: 了解一下几个设置沉浸式状态栏的基础属性:

  1. View.SYSTEM_UI_FLAG_LOW_PROFILE:低调模式, 会隐藏不重要的状态栏图标;
  2. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏导航栏;
  3. View.SYSTEM_UI_FLAG_FULLSCREEN:状态栏隐藏(高度不变);
  4. View.SYSTEM_UI_FLAG_LAYOUT_STABLE:保持整个View稳定, 常和控制System UI悬浮, 隐藏的Flags共用, 使View不会因为System UI的变化而重新layout;
  5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:视图延伸至导航栏区域,导航栏覆盖在视图之上(在style中设置windowTranslucentNavigation);
  6. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:视图延伸至状态栏区域,状态栏覆盖在视图之上(在style中设置windowTranslucentStatus);
  7. View.SYSTEM_UI_FLAG_IMMERSIVE:配合2或3同时使用,假设同时设置了2和7,状态栏隐藏,此时在状态栏顶部下滑,系统清除2设置,重新唤出状态栏,导航栏同理,滑动方向为由下至上;
  8. View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:作用与7相似,但是设置并未被清楚,所以状态栏与导航栏在被唤出3s后或再次点击时,再次隐藏。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/177393?site
推荐阅读
相关标签
  

闽ICP备14008679号