关闭

Android状态栏花样设置

标签: android状态栏
208人阅读 评论(0) 收藏 举报
分类:

一、沉浸栏

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

其实它的实现说起来也很简单,重写一下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();
    }
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android开发技巧——设置系统状态栏颜色

开门见山,先来三张效果图: 然后我们再来讲如何实现以及如何快速地实现。如何实现实现设置系统状态栏颜色需要至少在Android 4.4.2(API 19)以上。这是因为,在这个版本以下,没有任...
  • maosidiaoxian
  • maosidiaoxian
  • 2016-06-22 15:55
  • 36791

ANDROID 设置状态栏与标题背景颜色一致

在单个Activity里面,设置状态栏的背景: 1、在Activity的布局根文件中添加属性: android:fitsSystemWindows="true"   //不设置此属性,标题栏和系统状...
  • pengtaQ
  • pengtaQ
  • 2016-12-13 14:35
  • 1557

android-沉浸状态栏以及状态栏背景色如何设置

QQ实现了沉浸状态栏的效果,如图: 如图,好多应用如金山词霸等也实现了这样的效果。这样的效果很酷炫,其实设置很简单。 不过要说明的是,这种效果只能在API19以及以上版本中才能够做到。 如果想让...
  • u010156024
  • u010156024
  • 2015-09-10 10:08
  • 7908

android沉浸式状态栏封装—教你玩出新花样

android沉浸式状态栏封装—教你玩出新花样
  • androidstarjack
  • androidstarjack
  • 2017-07-30 18:49
  • 1445

android 状态栏颜色设置

  • 2015-12-14 09:40
  • 2.47MB
  • 下载

Android状态栏颜色设置

  • 2016-01-10 12:56
  • 2.10MB
  • 下载

[android源码分析]bluez启动过程中的各种plugin的初始化(一)--__bluetooth_builtin数组所耍的花样

在bluez启动过程中,各种插件的初始化尤为重要,没有这些插件,很多功能将无法实现。 2.3.5 plugin的初始化 插件的初始化,是什么的干活,其实还是很重要的,我们来看看吧。 gboole...
  • u011960402
  • u011960402
  • 2013-10-31 11:23
  • 2771

花样Android ProgressBar 史上最强大讲解/定制ProgressBar

专访周家安:我的十年编程自学之路        2013年全国百所高校巡讲讲师招募 花样Android ProgressBar 史上最强大讲解/定制ProgressBar ...
  • lgb861127
  • lgb861127
  • 2013-03-06 15:42
  • 621

花样Android ProgressBar 史上最强大讲解

普通圆形ProgressBar 该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中。 一般只要在XML布局中定义就可以了。   ...
  • woshishuoshuoa
  • woshishuoshuoa
  • 2013-08-13 21:31
  • 481

ListView,GridView的万能Adapter-------Android中的Adapter能玩出什么花样?

什么叫万能Adapter ----->你是不是厌倦了每次都必须继承个BaseAdapter,然后重写四个方法,再给他整一个ViewHolder,每次写好多代码,而且就算两个布局有一点差别就必须再重新写...
  • sinat_31311947
  • sinat_31311947
  • 2016-05-04 18:25
  • 419
    个人资料
    • 访问:36206次
    • 积分:676
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:1篇
    • 译文:0篇
    • 评论:6条
    最新评论