Android状态栏花样设置

来源:互联网 发布:新网络安全法内容 编辑:程序博客网 时间:2024/04/28 12:53

一、沉浸栏

说到沉浸栏,这个沉浸栏效果在很多游戏或者视频软件应用会用到。平时状态栏和导航栏都隐藏了,点屏幕中间部分不会出现,但是从屏幕上方滑动,或者右侧滑动的话,就会出现状态栏和导航栏,而且过一段时间后,状态栏也会缩回去。效果如下所示。
沉浸栏效果

其实它的实现说起来也很简单,重写一下Activity的onWindowFocusChanged()方法。
由于在19版本后才有沉浸栏,所以要判断一下。

 @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);        }    }

二、隐藏状态栏

隐藏状态栏后,从屏幕上方向下滑动状态栏会出来,但不会退回去。
效果如下:
隐藏状态栏
代码实现

/**     * 隐藏状态栏和标题栏,隐藏状态栏和ActionBar的方式在4.1系统之上和4.1系统之下还是不一样的     * 这里我就不准备考虑4.1系统之下的兼容性了     */    private void hideStatusBar() {        View decorView = getWindow().getDecorView();        int option = View.SYSTEM_UI_FLAG_FULLSCREEN;        decorView.setSystemUiVisibility(option);        ActionBar actionBar = getSupportActionBar();        actionBar.hide();    }

三、透明状态栏

效果:
透明状态栏

实现

 //5.0 21        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = getWindow();            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.setStatusBarColor(Color.TRANSPARENT);        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//19版本 4.4 - 5.0版本            Window window = getWindow();            window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            ViewGroup mContentView = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT);            View statusBarView = mContentView.getChildAt(0);            //移除假的 View            if (statusBarView != null && statusBarView.getLayoutParams() != null &&                    statusBarView.getLayoutParams().height == getStatusBarHeight()) {                mContentView.removeView(statusBarView);            }            //不预留空间            if (mContentView.getChildAt(0) != null) {                ViewCompat.setFitsSystemWindows(mContentView.getChildAt(0), false);            }        }        ActionBar actionBar = getSupportActionBar();        actionBar.hide();
 private int getStatusBarHeight() {        int result = 0;        int resId = getResources().getIdentifier("status_bar_height", "dimen", "android");        if (resId > 0) {            result = getResources().getDimensionPixelSize(resId);        }        return result;    }

这个分了两部分,一个是5.0以上版本,另外一个是4.4~5.0的。
在5.0版本中,设置相关的flag和setStatusBarColor(Color.TRANSPARENT)就可以实现状态栏透明化。
4.4版本采用的是另外的方法。

四、隐藏状态栏和导航栏

效果图:
隐藏状态栏和导航栏
触摸屏幕会出现状态栏和导航栏,且不回弹。

/**     * 隐藏导航栏和状态栏     */    private void hideStatusBarANavigationBar() {        /*        if(Build.VERSION.SDK_INT<16){            this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                    WindowManager.LayoutParams.FLAG_FULLSCREEN);        }*/        View decorView = getWindow().getDecorView();        int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION                | View.SYSTEM_UI_FLAG_FULLSCREEN;        decorView.setSystemUiVisibility(option);        ActionBar actionBar = getSupportActionBar();        actionBar.hide();    }

五、透明状态栏和导航栏

效果图:
透明状态栏和导航栏
实现代码:

/**     * 透明状态栏和导航栏     */    private void transparentStatusBarANavigationBar() {        if (Build.VERSION.SDK_INT >= 21) {            Window window = getWindow();            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            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);            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            getWindow().setNavigationBarColor(Color.TRANSPARENT);            getWindow().setStatusBarColor(Color.TRANSPARENT);        }        ActionBar actionBar = getSupportActionBar();        actionBar.hide();    }
原创粉丝点击