美文网首页
Android 状态栏的隐藏和显示

Android 状态栏的隐藏和显示

作者: graychen | 来源:发表于2018-01-16 13:58 被阅读0次

    在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,这样就可以将状态栏和导航栏同时隐藏了。现在重新运行一下程序,效果如图所示:

    相关文章

      网友评论

          本文标题:Android 状态栏的隐藏和显示

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