Android状态栏花样设置

原创 2017年09月12日 22:11:12

一、沉浸栏

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

其实它的实现说起来也很简单,重写一下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();
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loongago/article/details/77950467

Android设置状态栏透明与设置状态栏字体颜色Mode

#1 概念: 变色状态栏(透明状态栏):指的是状态栏与导航栏颜色相同,或者透明 沉浸式状态栏:,状态栏隐藏,在手指做了相关操作后,状态栏显示出来,例如视频播放器,在播放视频时是隐藏状态栏的,但是点击屏...
  • baopengjian
  • baopengjian
  • 2017-04-07 11:31:05
  • 7264

android设置透明状态栏

沉浸式状态栏:就是你看视频(横屏)的时候没有状态栏,就算你点击屏幕一下也不会出现状态栏的(需要从上屏幕边缘往下划一下才能出来状态栏),由于不好截屏这里我就不上图了,大家心领神会一下就行了。 透明式状...
  • xuaho0907
  • xuaho0907
  • 2017-06-01 22:43:18
  • 122666

Android 状态栏背景设置

问题如图所示,标题栏和背景颜色不统一,整体视感不协调。背景 1.Android 4.4之前状态栏默认黑色,不能改变 2.Android 4.4可以设置状态栏是否透明 3.Android 5.0+...
  • zhongshujunqia
  • zhongshujunqia
  • 2017-05-04 13:57:39
  • 1860

android 学习五 设置应用程序全屏(没有状态栏和标题栏)

去除android应用程序的标题栏和状态栏有两种方法:         一种是在java文件中使用如下代码可以实现全屏 public void onCreate(Bundle savedI...
  • liananse
  • liananse
  • 2011-11-12 00:25:12
  • 5381

Android设置状态栏透明代码!!!!

// 设置状态栏透明!!!!记得在setContentView之前 requestWindowFeature(Window.FEATURE_NO_TITLE); if(Build.VERSION...
  • RuingMan
  • RuingMan
  • 2016-06-03 15:50:39
  • 1338

Android 状态栏设置

看上图,Android 4.4之前,即使我们打开手机app,我们还总是能看到系统顶部那条黑乎乎的通知栏,这样会使得app稍显突兀。于是Android 4.4开始,便引入了Translucent Sys...
  • zhoujiyu123
  • zhoujiyu123
  • 2017-01-10 17:46:56
  • 782

如何设置android状态栏的透明度

今天设置状态栏透明度遇到BugCrash——TaskDescription's primary color should be opaque去谷歌了一下就是不能再v21下面设置它状态栏的透明度只能老老...
  • catROOM
  • catROOM
  • 2016-04-05 16:10:00
  • 2639

Android 设置无标题栏和无状态栏

/** * 标题栏隐藏 * 在Activity.setCurrentView()之前调用此方法 */ private void HideTitle() { // TODO TODO TODO...
  • aicpzl
  • aicpzl
  • 2015-06-01 11:07:36
  • 1696

android 状态栏背景颜色设置

android 状态栏背景颜色设置
  • fangjingjingll
  • fangjingjingll
  • 2016-01-25 10:24:58
  • 1888

Android 修改状态栏字体颜色

针对Android6.0+,MIUI6+,Flyme4+可以修改状态栏字体颜色: 1.对于android6.0,但是小米魅族不适配(见2,3) //设置成白色的背景,字体颜色为黑色。 ...
  • zhangyiminsunshine
  • zhangyiminsunshine
  • 2017-03-29 14:37:24
  • 6250
收藏助手
不良信息举报
您举报文章:Android状态栏花样设置
举报原因:
原因补充:

(最多只允许输入30个字)