Android沉浸式状态栏方法总结

作者: 开飞机的老舒克 | 来源:发表于2017-01-17 23:32 被阅读350次

为什么用沉浸式状态栏?

也不知道从什么时候开始大部分的App已经全部向沉浸式状态栏靠拢,这种效果应该是想让最顶部的状态栏和项目的标题栏过渡比较融和吧。
不过沉浸式状态栏这种叫法可能不太妥当。

本篇文章参考郭霖的博客。
郭霖博客地址:Android状态栏微技巧,带你真正理解沉浸式模式

第一种实现方式

其实主要实现的就是顶部状态栏和toolbar的颜色一致达到效果。

Paste_Image.png

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

其中 colorPrimaryDark这个参数就是设置状态栏的颜色,设置状态栏和toolbar或者自定义的标题栏颜色一致的话会显示

状态效果

第二种实现方式

第二种实现方式是把主题布局往上移动,把布局从屏幕的左上角开始计算。所以这种方式需要注意,把顶部状态栏的高度要计算在出来。

 if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }
        //隐藏标题栏
        ActionBar actionBar = getSupportActionBar();
        actionBar.hide();
布局往上移动的方式

第三种实现方式

第三种表面看来是全屏的方式,然后可以通过滑动顶部来实现状态栏的弹出,然后会自动隐藏掉。这种模式也是真正意义的沉浸式状态栏。

git效果:http://note.youdao.com/share/?id=fdc645c84ad9cd4e4ba0841b116a703c&type=note#/

自动隐藏顶部状态栏

实现方式:在Activity中实现如下方法

 @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus && Build.VERSION.SDK_INT >= 19) {
            View decorView = getWindow().getDecorView();
            decorView.setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
        }
    }

相关文章

网友评论

  • deli6780:将系统的状态栏透明化,系统的状态栏默认高度是25dp,可以将contentview的paddingtop设置为25dp,背景和contentview一致即可实现状态栏沉浸式设计。
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }
  • 梦想编织者灬小楠:为啥感觉和“锅神”那篇文章一样😶
    开飞机的老舒克:@梦想编制者灬小楠 嗯 ,文章开头说了和参考郭神的那篇,又增加了一种方式而已。

本文标题:Android沉浸式状态栏方法总结

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