Android 状态栏的隐藏和显示

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

    

Android 状态栏的隐藏和显示_第1张图片
状态栏和背景一个颜色

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


Android 状态栏的隐藏和显示_第2张图片

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

Android 状态栏的隐藏和显示_第3张图片

    也就是说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  将布局内容拓展到导航栏的后面


Android 状态栏的隐藏和显示_第4张图片

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

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

int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

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

getWindow().setStatusBarColor(Color.TRANSPARENT);


Android 状态栏的隐藏和显示_第5张图片
状态栏透明

注意两个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 状态栏的隐藏和显示_第6张图片

你可能感兴趣的:(Android 状态栏的隐藏和显示)