美文网首页
Android SystemUI的一些Flags

Android SystemUI的一些Flags

作者: 逃跑的计划中 | 来源:发表于2020-02-11 16:31 被阅读0次

    SystemUI WindowInsets StatusBar NavgationBar fitSystemWindows
    setSystemUiVisibility

    Android从4.4开始,SystemUI的形态就一直在随着市场的需求在不断的完善,直到Android 7.0关于SystemUI的API才变得完善

    Flags版本线索

    Android 2.3(API 9)

    // 全屏布局且隐藏状态栏:
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    // 全屏布局,不隐藏状态栏:
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN 
                                         | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    

    Android 3.0(API 11)

    添加 View.setSystemUiVisibility方法和两个Flags​View.STATUS_BAR_VISIBLE​和View.STATUS_BAR_HIDDEN​两个Flag控制StatusBar的显示与隐藏

    //显示
    getWindow().getDecorView().setSystemUiVisibility(​View.STATUS_BAR_VISIBLE​);
    //隐藏
    getWindow().getDecorView().setSystemUiVisibility(​View.STATUS_BAR_HIDDEN​);
    

    Android 4.0(JellyBean API 14)

    添加 导航栏NavigationBar,

    View.STATUS_BAR_HIDDEN  改名成 View.SYSTEM_UI_FLAG_LOW_PROFILE 
    View.STATUS_BAR_VISIBLE 改名成 View.SYSTEM_UI_FLAG_VISIBLE 
    
    View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE)
    View.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
    

    SYSTEM_UI_FLAG_LOW_PROFILE: 不隐藏状态栏和导航栏,只隐藏部分图标,但是电量图标不被隐藏
    SYSTEM_UI_FLAG_HIDE_NAVIGATION:隐藏NavigationBar,若有用户操作,状态将会被系统清除,显示出导航栏

    Android 4.1(JellyBean API 16)

    //全屏显示,隐藏状态栏和导航栏,等同于 WindowManager.LayoutParams.FLAG_FULLSCREEN
    View.SYSTEM_UI_FLAG_FULLSCREEN 
    
    //需要配合其他Flags使用,防止状态栏或者导航栏消失和显示带来的界面变化   
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    
    //Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住
    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    
    //使内容布局到NavigationBar之下,可以配合SYSTEM_UI_FLAG_HIDE_NAVIGATION使用防止跳动
    View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:
    

    Android 5.0(Lollipop API 21)

    //添加Flag, 表示需要允许可以在SystemUI下绘制背景
    WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
    
    //源码显示,如果设置FLAG_TRANSLUCENT_STATUS,会导致FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
    //失效,实现沉浸式状态栏需要clearFlags(FLAG_TRANSLUCENT_STATUS)
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    
    //添加方法控制状态栏和导航栏颜色
    getWindow().setStatusBarColor(int color)
    getWindow().setNavigationBarColor(int color)
    

    Android 6.0 (M API 23)

    //表示图标是深色的,控制状态栏和导航栏图标和文字颜色
    View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR     
    View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
    

    Android 5.0上虽然支持设置导航栏和状态栏的颜色自定义,但系统的图标颜色是不可改变的,默认的系统图标是浅色的,不同厂商的颜色不太一致,如果刚好app的颜色设置和系统图标颜色相近,将看不清系统图标,6.0上添加Light模式,改变状态栏和导航栏上图标和字体的颜色

    Android 9.0 (P API 28)

    displayCutout 刘海屏兼容

    相关文章

      网友评论

          本文标题:Android SystemUI的一些Flags

          本文链接:https://www.haomeiwen.com/subject/qsmxfhtx.html