之前做项目为了达到全面屏显示,设置了一个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:在代码中设置

WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
            activity.getWindow().setAttributes(lp);

方案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: 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后或再次点击时,再次隐藏。
@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View. 在android设置沉浸状态栏时,由于android碎片化的原因,一直以来是个难题。随着android官方的迭代,可以使用WindowInsetsControllerCompat进行方便的设置  版权声明:本文为博主原创文章,转载请注明出处。    https://blog.csdn.net/u014418171/article/details/81223681 注明下... 在iOS中,你可能发现页面会整体拉升到状态栏,整个页面效果就会显得更加的高端大气上档次,在Android4.4以后其实也有这种效果的实现,下面我就说一下在进行这种效果实现时碰到的一些坑,希望对大家有一些帮助吧。 首先来说一下关于这种效果的一些额外设置: windowActionBar:这个应该大家都知道,在自定义的Theme中设置成false,就没有系统默认的那个菜单选项了。 windowN 最近刚学这个。。自己记录写学习的步骤。。。1.windowTranslucentStatus这个属性为true的时候,效果是这样的。&lt;item name="android:windowTranslucentStatus"&gt;true&lt;/item&gt;也就是说,这个属性的作用就是让控件显示状态栏上。此参数支持api19以上。安卓4.4以上。2.windowTranslucentN... 最近在做一个Android项目,需要全,网上搜了方法后可以把上方状态栏隐藏,但是不知道什么情况,我的水滴在隐藏后原位置出现的是黑条,很烦。 然后尝试了很多方法,包括直接用android studio的fullscreen activity,仍然没解决,后面查找资料 加入以下代码: WindowManager.LayoutParams lp = this.getWindow().getAttributes(); if (Build.VERSION.SDK_INT >= Build. &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;resources&gt; &lt;color name="colorPrimary"&gt;#000000&lt;/color&gt; &lt;color name="colorPrimaryDark"&amp 2.快捷点击进入@style/AppTheme,这是项目创建自带文件 3.在 parent属性改成Theme.AppCompat.Light.NoActionBar----------标题栏一起隐藏,否则只隐藏状态... 现在搜索Android 沉浸状态栏,真的是一堆一堆,写的特别多,但是真正用的舒服的真没有,在这里自己整理一下开发记录 注意,在使用这个步骤过程之前,请把之前设置的代码注释一下: 把布局带有 android:fitsSystemWindows 注释掉 style文件中凡是在 style.xml 中 有关 windowTranslucentNavigationwindowTr... 启动页全面的适配 为了能够避免一个短暂的黑或白现象,我们都会在闪页面(或者启动页面)的theme上加上一张背景图。但是如果不适配,在全面的手机上会有拉伸的现象。 解决方法 1.在清单文件中配置,全面的一些参数 <!-- 允许绘制到oppo、vivo刘海机型的刘海区域 --> <meta-data android:name="android.max_aspect" android:value="2. 如果想单独的设置隐藏一个的话,hideSystemUI这个方法里面只是修改参数就行,开发者文档写的很全面啊。这个就是隐藏导航栏状态栏,在自己的BaseActivity中copy就行了。这么说吧,看别人的文章不如看开发者文档啊。然后在onCreate中加全就ok了。注:自己的布局不要加。 状态栏和导航栏都会显示成半透明的状态。并且布局会拓展到系统栏的后面。本文就是要从源码分析windowTranslucentStatus的实现原理。因为windowTranslucentNavigati... 当幕旋转90度时,我们将旋转角度设置为1,并将导航栏的位置重置为整个幕。当幕旋转180度时,我们将旋转角度设置为2,并将导航栏的位置重置为(0, 0, 239, 319)。当幕旋转270度时,我们将旋转角度设置为3,并将导航栏的位置重置为整个幕。当幕未旋转时,我们将旋转角度设置为0,并将导航栏的位置重置为(0, 0, 239, 319)。在安卓系统中,当幕旋转时,有时会出现导航栏消失或者出现黑边的问题。方法来检测幕旋转后的方向,并根据方向来设置液晶的旋转角度和导航栏的位置。