Android 状态栏的隐藏和显示

在Android应用中我们可能会碰到这样的需求,隐藏状态栏或者状态栏和应用背景一样的颜色,比如下图:

    

状态栏和背景一个颜色

Android应用程序的界面上系统元素构成如下图:


在4.1之后的系统,隐藏状态栏可以设置DecorView的option参数。关于DecorView,这里也简单介绍下,先用一张图看下它的位置关系

    也就是说DecorView是Activity窗口的根视图。每个activity都对应一个窗口window,这个窗口是PhoneWindow的实例,PhoneWindow对应的布局是DecirView,是一个FrameLayout,DecorView内部又分为两部分,一部分是ActionBar,另一部分是ContentParent,即activity在setContentView对应的布局。



public class MainActivity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        View decorView = getWindow().getDecorView();

        int option = View.SYSTEM_UI_FLAG_FULLSCREEN;

        decorView.setSystemUiVisibility(option);

        ActionBar actionBar = getSupportActionBar();

        actionBar.hide();

    }

SYSTEM_UI_FLAG_FULLSCREEN 的作用就是隐藏状态栏,点击屏幕的时候不会出现,下拉的时候会出现,相应的字段还有:

SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION  将布局内容拓展到导航栏的后面


虽说这才是正统的沉浸式含义,但有些朋友可能想实现的就是饿了么那样的状态栏效果,而不是直接把整个系统状态栏给隐藏掉,那么又该如何实现呢

这个状态栏隐藏了,但是想像饿了么那样设置成透明效果,应该如何做呢?只要将option改为如下就可以了

int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

同时 将  StatusBar颜色设置为透明的

getWindow().setStatusBarColor(Color.TRANSPARENT);


状态栏透明

注意两个Flag必须要结合在一起使用,表示会让应用的主体内容占用系统状态栏的空间。

另外看下底下的导航栏如何隐藏,其实也是使用了不同的UI Flag而已

int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN;

这里我们同时使用了SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN,这样就可以将状态栏和导航栏同时隐藏了。现在重新运行一下程序,效果如图所示:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,453评论 25 708
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 11,568评论 12 197
  • 36期亲子班第6组-殷光琴 (张镐然10岁)加油! #口号(只有感觉好才能做得好) 孩子第四个30天目标: 1、英...
    yincarol琴阅读 217评论 0 0
  • 近日写字,总觉得少了点什么。究竟少了什么呢?甚是迷茫。于是打了几天坐,也没有多大收获。随手翻了看了下已经...
    愚公移学阅读 443评论 0 0
  • 首先声明我不是保险公司的,我不是保险公司的,我不是保险公司的,重要的事情说三遍!!! 我自己就是从农村里走出来的,...
    筱心跳阅读 583评论 0 2

友情链接更多精彩内容