关于 Android 状态栏的适配总结

实现android状态栏的适配和样式调整需要根据不同的android版本采用不同的方法,以下是详细的说明和示例:

  1. 沉浸式状态栏:使内容布局延伸到系统状态栏,实现透明效果。

    • Android 5.0及以后版本:通过设置属性

      View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
      ,内容布局可以延伸到系统状态栏。然后使用
      setStatusBarColor()
      方法将系统状态栏设置为透明。

      getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
      getWindow().setStatusBarColor(Color.TRANSPARENT);
    • Android 4.4 ~ Android 5.0:使用

      getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
      使状态栏透明,并使内容布局延伸到系统状态栏。此方法在Android 5.0及以后版本上也可以使用,但效果不理想。

      getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    • Android 4.4之前:不支持透明状态栏。

    注意:在设置透明状态栏时,内容布局需要延伸到状态栏,因此使用

    fitSystemWindows
    属性会导致奇特效果。

  2. 状态栏颜色与布局颜色搭配:不延伸内容布局到系统状态栏,只需调整状态栏颜色以匹配内容布局。

    • Android 5.0及以后版本:使用

      setStatusBarColor()
      方法或修改
      colorPrimaryDark
      的颜色来设置状态栏颜色。

      getWindow().setStatusBarColor(Color.parseColor("#YOUR_COLOR"));
    • Android 4.4 ~ Android 5.0:虽然不能直接修改状态栏颜色,但可以通过设置状态栏透明,然后为内容布局添加一个合适颜色的padding来模拟状态栏颜色。

      getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
      // 在布局中为根布局或Toolbar设置padding和背景颜色
    • Android 4.4之前:不支持修改状态栏颜色。

    状态栏的适配主要关注上述两点,针对不同Android版本使用相应的方法,避免混用以防出现奇特效果。

效果图:

Android4.4以下.png

Android4.4透明no.png

LinearLayout使用

fitsSystemWindows
属性:

Android4.4透明toolbar-yes.png

ToolBar设置

fitsSystemWindows
效果:

Android4.4透明toolbar-yes.png

Android 5.0及以后版本的新增功能:

  • 可以直接操作状态栏颜色。

Android 6.0的新增功能:

  • 可以更改状态栏字体颜色。默认是白色,可以修改为黑色。

    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

关于

fitSystemWindows
方法

// 当insets视图插入,window已经更改了,视图层次结构调用。允许它调整内容来适应这些窗口。
fitSystemWindows(Rect insets);

此方法用于处理系统视图插入时对内容布局的影响,通常在使用

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
时需要处理,以确保内容布局正确显示。