Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色

最近 被一个没搞过的问题难倒了,因为不知道,所以不会
会了才发现这么简单,

一个关于沉浸式状态栏的问题。

国内大多数App目前大于等于Api19的 会别出心裁的使用沉浸式状态栏。

看了网上介绍,关于沉浸式状态栏大概有几种,透明状态栏,变色状态栏,沉浸式状态栏。变色状态栏大概只是通用说法,无论沉浸式还是透明的 都可以实现状态栏的变色。这里就不再介绍。

1,透明状态栏

顾名思义就是透明的状态栏: 布局延伸到了 状态栏,状态栏背景和应用背景相同。如果不想挤占状态栏位置空间则需要我们在Activity的Theme中添加代码

    **<item name="android:fitsSystemWindows">trueitem>**

恢复挤占空间。

透明状态栏中 状态栏是一直显示的,只是其背景为透明的。而沉浸式状态栏多应用于游戏或者阅读中,当我们点击屏幕,或者滑动时才会显示出状态栏中的时间,以及消息内容等。两者还时有区别的。

例子:qq以及 uc天气都是 透明状态栏的效果
Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第1张图片
Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第2张图片

实现方法:

在 values样式中的 styles.xml >=19API 才会有效果

 
    
    <style name="changeBar" parent="Theme.AppCompat.Light.NoActionBar">
        --和  代码中效果一样-->
        <item name="android:windowTranslucentNavigation">trueitem>
        <item name="android:windowTranslucentStatus">trueitem>
        --恢复状态栏的  位置空间-->
        <item name="android:fitsSystemWindows">trueitem>
    style>

或者 代码中 添加 方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_transparent);

        initWindow();
    }

    //版本  大于等于 19  才会生效
    private void initWindow(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }
    }

效果:

Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第3张图片

2,沉浸式状态栏:沉浸模式和普通全屏不同点在于,沉浸模式通过下滑屏幕上方或者下方可以调出虚拟键和状态栏。 其和 全屏下的模式又有不同,全屏模式是不会调出状态栏的。而沉浸模式则是可以。

例子:
阅读例子:
Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第4张图片

触摸屏幕后:
Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第5张图片

DEMO效果:

Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第6张图片

github: https://github.com/zqHero/TrancurentSysBar

小结:这种例子 网上很多。另外在介绍一个github的开源库:
https://github.com/jgilfelt/SystemBarTint
附上库的效果:

Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第7张图片

透明状态栏:
Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第8张图片

改变状态栏颜色:
Android 沉浸式状态栏以及 透明状态栏 和修改状态栏颜色_第9张图片

你可能感兴趣的:([Android])