沉浸式,透明式,可变状态栏解读

最近项目需求中需要对statusBar做透明穿透处理,刚开始没想太多,随着开发进行,发现坑位那绝对是满满的,主要就是要对不同的API进行适配,很难做到多平台的兼顾。

android的状态栏有三种不同状态,分别是:
  • 沉浸式状态栏
  • 透明状态栏(又可分为“半透明”和“全透明”)(API>=19)
  • 变色状态栏(API>=21)

沉浸式状态栏指的是,状态栏隐藏,在手指做了相关操作后,状态栏显示出来,例如视频播放器,在播放视频时是隐藏状态栏的,但是点击屏幕的时候,状态栏会显示出来,再例如文本阅读器,在阅读的时候是全屏的,然后从屏幕上方下滑或者下方上划,虚拟键和状态栏出现了,但却是直接覆盖在程序文字上的,这是所谓的沉浸式状态栏,而我们经常把沉浸和透明混为一谈,其实是有本质区别的。

半透明状态栏

Android4.4(API 19)以后才开始支持Android:windowTranslucentStatus属性,需要注意的是,TranslucentStatus属性虽然是从4.4开始支持的,但在 4.4 和 5.x 上的表现不同,不过都可以概括为一种半透明,4.4 是一层渐变的遮罩层,样子是这样的:

bantouming.png

而5.x 以上是一条半透明的遮罩层,样子是这样的:

zhezhao.png

可以看到Android:windowTranslucentStatus属性无论在4.4上还是5.0上都做不到全透明,不过后来发现有的个别手机ROM厂商,不太按套路出牌,比如这个华为ROM,在其5.0上通过这个属性就可以做到全透明,但是我还是发现了它支持的并不稳定,偶尔还是出现个半透明条,所以,还是按API要求来干事,两个字——保险

全透明状态栏

通过上面的分析,可知通过属性Android:windowTranslucentStatus并不能做的真正做到状态栏的全透明,想实现全透明就需要靠另外一个属性了——Android:statusBarColor,是的,这个同时也是下面要讲的变色状态栏要用到的,所以,往下看~~~

变色状态栏

这个是v21(5.0)以后才开始支持,主要通过Android:statusBarColor进行设置,通过它可以自由设置状态栏颜色,当然包括透明色,所以在5.0之后才能实现statusBar全透明

到此,以上是对statusBar三种样式的状态介绍,从介绍中不难得出至少两个结论:

  • 第一,对于在5.0以下的系统里如果想实现statusbar全透明是做不到的。

  • 第二,就是在5.0以上系统里实现statusbar全透明有两种方式,一种我称为 “伪透明” 即假的透明,另一种就是 “真透明” 了。

伪透明状态栏

伪透明指状态栏是有背景颜色的,而并非透明状态,只不过是通过Android:statusBarColor属性把statusbarde的颜色设置的和状态栏下面的View的颜色一样了,这和真透明状态栏的主要区别就是此时界面中的view显示是在statusbar下面的,并没有延伸到statusbar的顶部。

真透明状态栏

真透明状态栏区别于上面的伪状态栏就不用说了,它通过把Android:statusBarColor属性设置为透明,而且一个不能忘记的是需要同时设置layout布局延伸到屏幕顶部,否则statusbar透出的背景就是window的根布局的背景颜色了,也即是DecorView的颜色。设置布局延伸到顶部的相关代码:

  Window window = getWindow();
  int originStatus = window.getDecorView().getSystemUiVisibility();
  int deStatus = originStatus | 
  View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
  window.getDecorView().setSystemUiVisibility(deStatus);

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN这个flag就是控制让你的布局延伸到屏幕顶部,此时statusbar会覆盖在布局上面,它和View.SYSTEM_UI_FLAG_FULLSCREEN很相似,可自行查看相关含义。

看到这,感觉也就这么多东西,没什么难得啊,直接写不得了,是不是忽略了statusbar上面显示的内容了呢,android中默认的statusbar样式基本是黑色或者灰色背景,然后里面的内容是白色,有的说了既然statusbar的背景颜色可以设置了,内容不也有个属性android:windowLightStatusBar可以控制颜色呢,确实,可以通过这个属性来改变statusbar上内容的颜色,但是这个api是android6.0以后才有的,这就尴尬了,statusbar的颜色在5.0以上的系统都可以改变,但是它上面内容的颜色只有在6.0以上的系统才能控制,那么在5.0和6.0之间的系统,就会很容易发生下面这种场景:

  • statusbar的颜色需要设置成白色或者说statusbar穿透的背景是白色了,而statusbar上的内容默认也是白色

此时对于在5.0和6.0之间的系统遇到以上这种情况不就悲催了,而且你是无法去完美适配的,除非你的app不讲究一致性和协调美,因为google没给你方法,唉。

在实际开发中,我们要做不同的适配,针对不同的sdk运用不同style,在4.4以下使用默认的,完全不做透明处理;在4.4 和5.0之间做成半透明;5.0以上其实已经可以做成全透明了,但是会有状态栏文字颜色不能修改,因为6.0以后才能修改状态栏的文字颜色,这时候很容易导致状态栏的文字颜色和下面的颜色重叠,对于这种情况通常下可做成百分之五十的透明色,当然这个要根据实际情况处理,如果不会出现重叠或者无关紧要,可直接做成全透明;对于6.0以上的就完全可以全透明了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容