以及上面这个例子的用法说明:

以上的例子几乎可解决所有状态栏的问题,以下是彼人以前经常使用的沉浸状态栏方法,也可解决问题,但不全面,现在虽不用但也是一个知识点,在此记之。

 

备注:在写这个demol时粗心在基类的onCreate忘记调用抽象方法instantiation(),导致子类无法执行该方法,从而点击事件无响应,在此备注以免以后又犯同样的错

android 沉浸式状态栏学习 安卓10沉浸式状态栏_android 沉浸式状态栏学习

安卓系统应用情况:

目前安卓系统最高为8.0,但使用的很少。应用最广的系统是6.0,7.0的用户也在不断的增多。低版本的手机系统也会慢慢的被淘汰,低版本系统的手机很多app也安装不了,其实低于4.4系统的手机应该很少见了。所以适配系统一般不考虑低版本的。沉浸式状态栏在5.0(含)开始适配,低于该版本的状态栏还是系统默认的背景颜色

一、Activity状态栏沉浸式解决方法

      1.标题栏背景是色值,状态栏的处理方式。

      1)首先在values、values-v19、values-v21、values-v23文件夹下的styles.xml都设置一个ZaqAppThemeSingle的风格

        

android 沉浸式状态栏学习 安卓10沉浸式状态栏_fragment_02

values:

 

<style name="ZaqAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@android:color/white</item>
    <item name="colorPrimaryDark">@android:color/white</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/white</item>
    <item name="android:windowAnimationStyle">@style/windows_define_animation</item><!--界面跳转的动画-->

</style>

 

values-v19:

 

 

<style name="ZaqAppThemeSingle" parent="ZaqAppTheme">
    <!-- Customize your theme here. -->
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>

values-v21:

 

<style name="ZaqAppThemeSingle" parent="ZaqAppTheme">
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>

values-v23:

 

<style name="ZaqAppThemeSingle" parent="ZaqAppTheme">
    <!--跟代码控制一致-->
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <!--设置状态栏-->
    <item name="android:windowTranslucentStatus">false</item>
    <!--手机底部的虚拟化颜色-->
    <item name="android:windowTranslucentNavigation">false</item>
    <!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
    <item name="android:statusBarColor">@android:color/transparent</item>
    <!--该属性为android6.0版本之后的新功能,改变状态栏本身系统显示的颜色值 -->
    <item name="android:windowLightStatusBar">true</item>
</style>

2) 在清单文件中配置需要沉浸式状态栏的activity加入theme

android 沉浸式状态栏学习 安卓10沉浸式状态栏_fragment_03

3)在Activity的每个布局文件中的根布局加入“android:fitsSystemWindows=”true”,但是为了开发方便,可以在基类中添加以下红色框框代码来替换上面这句。

android 沉浸式状态栏学习 安卓10沉浸式状态栏_android 沉浸式状态栏学习_04

2.标题栏背景是图片,状态栏的处理方式。

 

 1)首先在values、values-v19、values-v21文件夹下的styles.xml都设置一个ZaqImgThemeSingle风格

values:

<style name="ZaqImgTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowAnimationStyle">@style/windows_define_animation</item><!--界面跳转的动画-->
</style>
values19:
<!--图片作为状态栏的背景色使用的theme-->
    <style name="ZaqImgThemeSingle" parent="ZaqImgTheme">
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
    </style>

values21:

 

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

 

2)在清单文件中配置需要沉浸式图片状态栏的activity加入theme

android 沉浸式状态栏学习 安卓10沉浸式状态栏_android_05

3)同(1.标题栏背景是色值,状态栏的处理方式。)步骤3

二、fragment沉浸式状态栏,一个Activity嵌套多个frgment,所有的fragment的标题栏色值都一样

1)在Activity中关联布局后设置状态栏色值

 

public  void setStatusBarColor(int color) {
    // 5.0 以上
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        getWindow().setStatusBarColor(color);
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        View view = new View(this);
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight());
        view.setLayoutParams(params);
        view.setBackgroundColor(color);
        ViewGroup decorView = (ViewGroup) getWindow().getDecorView();
        decorView.addView(view);
    }
}
/**
 * 获取状态栏的高度
 */
public  int getStatusBarHeight() {
    int statusBarHeightId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    return getResources().getDimensionPixelOffset(statusBarHeightId);
}

2)在清单文件AndroidManifest.xml中把该Activity的theme设置成ZaqNoTitleTheme

在values文件:
<style name="ZaqNoTitleTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@color/black_mainme</item></style>
3)同(1.标题栏背景是色值,状态栏的处理方式。)步骤3