Android开发Android全集

View.setSystemUiVisibility(int)参

2019-08-10  本文已影响0人  littlefogcat

在开发透明状态栏的时候,会使用到这段代码(来自郭霖的博客):

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 21) {
    View decorView = getWindow().getDecorView();
    int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    decorView.setSystemUiVisibility(option);
    getWindow().setNavigationBarColor(Color.TRANSPARENT);
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

会用是知其然,但是要知其所以然。那么,这个setSystemUiVisibility方法传入的这个参数,到底起到什么作用呢?

回过头再看开始的代码

uper.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= 21) {
    View decorView = getWindow().getDecorView();
    int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    decorView.setSystemUiVisibility(option);
    getWindow().setNavigationBarColor(Color.TRANSPARENT);
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}
ActionBar actionBar = getSupportActionBar();
actionBar.hide();

在普通情况下,整个手机界面从上到下依次是:状态栏、appUI、虚拟导航栏。当设置了SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION和SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN两个flag之后,实际上appUI已经占到了整个屏幕,但是被状态栏和导航栏覆盖在下层。


图示

这时,再设置状态栏和导航栏的颜色为透明,即可实现透明状态栏/沉浸式的效果了。当知道了这些flag的作用之后,要实现其他效果也是很轻松了。比如看视频的时候,就可以设置SYSTEM_UI_FLAG_IMMERSIVE_STICKY | SYSTEM_UI_FLAG_HIDE_NAVIGATION | SYSTEM_UI_FLAG_FULLSCREEN,就可以实现全屏沉浸式观看的效果了。

上一篇 下一篇

猜你喜欢

热点阅读