SystemUI Flag详解及使用情景

2020-05-25  本文已影响0人  code希必地

1、能够造成SystemUI Flag被系统自动清除的交互分类

  1. 触摸屏幕的任何位置;
  2. 顶部下拉状态栏;
  3. 底部上拉导航栏;
  4. Window的变化(如:跳转到其他页面、软键盘的弹出)

2、SystemUI Flag 相关特性详解

3、WindowManager 相关特性详解

  1. 半透明NavigationBar,并且不会因用户交互而被清除。
  2. 设置了此flag,系统会自动设置View.SYSTEM_UI_FLAG_LAYOUT_STABLE和View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    最低版本支持:Android4.4 (api 19)
  1. 用于为StatusBar和NavigationBar设置背景颜色。
  2. 原理:将StatusBar和NavigationBar设置为透明背景,并且将StatusBar和NavigationBar所在空间设置为Window.getStatusBarColor() 和Window.getNavigationBarColor()方法获得的颜色。
    最低版本支持:Android5.0 (api 21)。
    我们给状态栏和导航栏着色的方法如下:
 getWindow().setStatusBarColor(Color.RED);
  getWindow().setNavigationBarColor(Color.RED);

如果在styles中配置这个属性android:windowDrawsSystemBarBackgrounds=false:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    </style>

会导致给状态栏和导航栏着色失效。
再看另外一种场景:我们在解决App启动时的黑屏的问题的解决方案如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash</item>
        <item name="android:windowFullscreen">true</item>
        <!--不让windowBackground延申到navigation bar区域-->
        <!--<item name="android:windowDrawsSystemBarBackgrounds">false</item>-->
        <!--适配Android P刘海屏-->
        <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
    </style>
</resources>

很简单就是给window设置一个背景,但是在含有导航栏的手机来说,背景会被其遮挡。

闪屏.png
图中蓝色框中的logo就是设置的背景,绿色框中logo是页面中的内容。具体实现可以去看
Android Splash Screen最佳实践,包含全面屏,刘海屏适配。很明显的看出设置的背景被导航栏,遮挡了,怎么解决呢?
可以设置属性android:windowDrawsSystemBarBackgrounds=false。
上一篇 下一篇

猜你喜欢

热点阅读