2018-09-13

目录

如何实现?

集成DEMO

简短的分析

一个额外的小栗子

我想让状态栏变色怎么办?

为什么这么做?

总结

效果预览:

透明状态栏效果

如何实现?

第一步: 在platforms/android/src/../../MainActivity.java路径下MainActivity.java()中的super.onCreate()函数后添加如下代码:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  getWindow().getDecorView().setSystemUiVisibility(      View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |      View.SYSTEM_UI_FLAG_LAYOUT_STABLE);}

不要忘了在MainActivity.java 中导入依赖包:

importandroid.os.Build;importandroid.view.View;

第二步:在项目根目录的config.xml文件中添加下面配置,这里需要注意

颜色的设置至关重要,此处是八位hex color,前两位是透明度,后六位是RGB颜色值.可以根据自己的需要配置.

第三步: 在app.scss中添加样式

.platform-android {    ion-header {      padding-top:$cordova-md-statusbar-padding;      background-color: color($colors, primary);    }}

OK! 你现在有一个透明的状态栏了。详细内容或具体的实现细节请查看项目仓库,项目将会持续更新,同时你能获取到更多有用的bug修复。我们建议你这样做。

集成DEMO

项目地址:

[ionic2-super-bar]https://github.com/jeneser/ionic-super-bar

(2017/4/1更新)

还是有点麻烦,我按照你的方法怎么都实现不了,能不能来点刺激的.....嗯,你的要求我尽量满足。

文章发出来一段时间后,得到了很多小伙伴的支持,也积累了一些问题。于是就抽时间写了个DEMO,解决了小伙伴本疑问比较多的地方,呐,你想要的都在这里了。你可以狠狠的点击下面的链接去往仓库地址,一探究竟。可以直接clone下来,根据README里Transparent statusBar for android进行简单的配置,直接运行,便能看到效果了,之后你便可以自由发挥了......

(2017/4/17更新)

关于兼容性的说明:

文章发布之后,很多同学说按照你的说法,不能实现啊,很多同学的问题都在于没有关注android版本号。首先透明状态栏(国内大多称沉浸式状态栏)是在android5之后添加的新特性,android4经过hack只能实现半透明的状态,不是特别美观,实现起来有些复杂。所以这个文章以及下面的demo专注于android5+,在android5+下表现正常.在android4中状态栏默认黑色,不会因此影响你的页面布局,和整体的效果。

兼容性列表:

兼容性说明

(2017/7/7更新)

关于同一个项目中使用本项目的方法和原生状态栏插件冲突的问题?

你只需要调整一下以上方法的第二步:在src/app/app.component.ts中修改statusbarbackgroundcolor。这样,同一个项目中使用本项目的方法和原生状态栏插件。android和IOS之间将不会有任何冲突。我们建议你这样做。这些代码是无害的!

// #AARRGGBB where AA is an alpha valueif(this.platform.is('android')) {this.statusBar.backgroundColorByHexString("#33000000");}

你可以查看这个issue来了解更多:Can we use your option for Android and native status bar plugin for iOS devices on the same project?

简短的分析

第一步,将视口设置全屏将状态栏固定在视图之上,第二步,配置状态栏颜色,这一步有一个概念需要清楚,hex color是能定义透明度的,我们平常所见的类似#ffffff是六位的RGB颜色,这里在前面再加两位便是能定义透明度的ARGB,也就是RGB色彩模式附加上Alpha(透明度)通道.所以可以根据自己的需要进行不同透明度的设置.第三步,由于我们将视口扩大至了整个屏幕,自然我们的页面会被覆盖在状态栏下面,我的做法是给ion-header加一个内边距,并且指定一个背景颜色,当作默认的状态栏底色。当然这里你可以自由发挥,你只要记着现在你写的页面已经在透明的状态栏下面了,你要做的就是让页面下移状态栏的高度,腾出位置避免覆盖.

此时,你可能已经意识到,这个方案是比较灵活的,你可以自由的控制你的页面和状态栏的位置.很多同学想要这样一种效果:图片深入到透明的状态栏下面.想一想是不是很容易实现呢?你只需要简单修改或添加第三步中的css样式即可完成你的设计,是不是很酷...

补充:很多小伙伴记不住hex color各透明度的值,或者不是太了解hex color,请各位小伙伴自行google吧。我这里给出一个hex color各透明度的值.。

参考链接:Hex Opacity Values

一个额外的小栗子

还是先贴效果图

透明状态栏效果

左侧有一个隐藏的滑动菜单,在Material Design中,上面的那张图片一般是延伸到透明的状态栏下面的,如果状态栏不透明,会很难看,对设计细节比较在意的同学肯定不能忍......

其实实现起来也很简单,还是上面的步骤,只是第三步有一些变化,在ion-header外面又套了一层.ion-page.如果你还有点迷糊,可以查看项目源码,一探究竟。

.platform-android {  .ion-page {    ion-header {      padding-top:$cordova-md-statusbar-padding;      background-color: color($colors, primary);    }  }}

我想让状态栏变色怎么办?

在上面第三步,我设置header的padding并指定了background-color,很容易理解这里的背景颜色深入到状态栏下面,提供一种近似于沉浸式的效果,这样做简单,对不了解android的童鞋理解起来很轻松。

第一种方法是覆盖上文第三步中的cssbackground-color: color($colors, primary);,正确使用选择器可以实现不同页面拥有不同颜色的状态栏。

第二种通过编程的方式:可以使用cordova-plugin-statusbar插件,

在不同视图加载时调用StatusBar.backgroundColorByHexString("#55C0C0C0");(同样这里的颜色值也是能添加透明度的)来实现不同页面不同颜色的状态栏.

为什么这么做?

下面是我解决这个问题所走的弯路可掉的坑,如果你有兴趣也可以接着读下去。

其实呢这一段套路够深的话,应该是放在前面调胃口用的....haha...嗯,闲话不扯,就说说我为什么要这么做呢?其实我和很多小伙伴一样不是专门做android开发的,我是一名小前端,灌水党,能力还是比较有限的。所以很多地方也是有问题的,也请小伙伴们多多指教。定当感激不尽!

下面是我解决问题的思路和做法 供参考

透明状态栏网上能google出一大堆的解决方案,但大多是针对原生代码的解决方案,都不错,但有关于ionic2的解决方案少之又少,并且说法不一,方法各异,不知道谁对谁错,满满的都是泪。并且在googleionic2 statusbar transparent时结果的第一条答案还是有偏差的,标题是How can I make a transparent toolbar? - ionic 2 - Ionic注意是toolbar而不是statusbar,很多同学把这两个东西混在了一起,导致很多童鞋云里雾里的傻傻分不清.....

在那个帖子中,大家讨论的是toolbar的透明,其实在Ionic 2 Beta 10中已经解决这个问题了.可以参考里面的做法.我这里就不说了.

好吧,接着google,接着从各种信息中筛选我想要的结果,未果.....大概是一天之后,偶然发现了这个帖子首先要感谢@peterbetos.

我按照peterbetos提供的方法,但是遇到很多编译错误,尤其是下面这句,ContextCompat依赖android.support.v4.content.ContextCompat,各种尝试各种错误,是有点麻烦嘛!又试了试,搜了搜,还是有问题。

getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.status_bar_transparet));

既然上面一小段代码问题这么多,干脆不要,于是就有了上面那三步.我能通过第二步的hex color实现透明,就不用这么麻烦了,理解起来也更简单......于是简单起见,决定根据现有代码,按照自己的思路实现一下,说干就干......

最后

ionic正在快速迭代,前两天刚发布2.2.0.很多东西在开发和完善中,就透明状态栏来讲,ionic官方给出的方案是使用cordova-plugin-statusbar插件,但是目前这个插件透明状态栏在android下不支持,这就尴尬了不是,好消息是已经有人PR,坏消息是,一年了还没有合并.....从兼容性和技术上讲是有一定的难度的,需要考虑的东西也很多。

目前ionic团队正在做重要的事,而cordova-plugin-statusbar插件也不知何时解决这个问题,也许是明天,也许是很久,谁知道呢?所以你若是觉得这个方案还可以接受,用以

作者:jeneser

链接:https://www.jianshu.com/p/4c283e37294f

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

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

推荐阅读更多精彩内容

  • 目录 如何实现? 集成DEMO 简短的分析 一个额外的小栗子 我想让状态栏变色怎么办? 为什么这么做? 总结 效果...
    luoluoangel阅读 153评论 0 0
  • 目录 如何实现? 集成DEMO 简短的分析 一个额外的小栗子 我想让状态栏变色怎么办? 为什么这么做? 总结 效果...
    jeneser阅读 15,740评论 17 23
  • 框架集 框架集和内联框架的作用类似,都是用于在一个页面中引入其他的外部的页面框架集可以同时引入多个页面,而内联框架...
    沙子_32c6阅读 203评论 0 0
  • Android 中Textureview和SurfaceView使用问题总结 1、 TextureView是And...
    问心2018阅读 9,406评论 3 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,431评论 25 707