1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Ionic3--Android手机状态栏实现沉浸式效果(即透明悬浮状态)

Ionic3--Android手机状态栏实现沉浸式效果(即透明悬浮状态)

时间:2022-06-10 04:54:07

相关推荐

Ionic3--Android手机状态栏实现沉浸式效果(即透明悬浮状态)

先来对比一下几种状态栏的效果:

图1:初始化项目时的效果 图2: 改变背景色和字体颜色后的效果 图3:实现沉浸式透明悬浮后的效果

简单介绍一下ionic的StatusBar中的一些属性,具体内容请参见Ionic官方文档(/docs/v3/native/status-bar/)

一、改变状态栏背景字体样式,实现图2的效果

// ponent.tsimport { Platform } from 'ionic-angular';import { StatusBar } from '@ionic-native/status-bar';@Component({templateUrl: 'app.html'})export class MyApp {constructor(public platform: Platform, public statusBar: StatusBar) {this.platform.ready().then(() => {this.statusBar.styleDefault(); //深色文本this.statusBar.backgroundColorByHexString("#f8f8f8"); //浅色背景});}}

二、沉浸式效果,即图3所示的效果

1、在ponent.ts中将overlaysWebView设置为true,再将状态栏的文本色设置为深色文本(具体你们可以根据自己项目的标题栏背景色来设置)

// ponent.tsimport { Platform } from 'ionic-angular';import { StatusBar } from '@ionic-native/status-bar';@Component({templateUrl: 'app.html'})export class MyApp {constructor(public platform: Platform, public statusBar: StatusBar) {this.platform.ready().then(() => {this.statusBar.overlaysWebView(true);this.statusBar.styleDefault(); //深色文本});}}

2、在app.scss文件中设置标题栏的padding-top值和背景色

// app.scss.platform-android {// 沉浸式状态栏,设置header留出状态栏的位置ion-header {padding-top: #{$cordova-md-statusbar-padding};background-color: color($colors, head-color); //设置标题栏的背景色.toolbar-background {background-color: color($colors, head-color); //设置标题栏的背景色}}.immersive {padding-top: #{$cordova-md-statusbar-padding};}}//variables.scss$colors: (head-color: #f8f8f8;)

3、最后在StatusBar.java文件中的run方法里添加以下内容,代码中有注释。(文件路径:⁨platforms⁩ ▸ ⁨android⁩ ▸ ⁨app⁩ ▸ ⁨src⁩ ▸ ⁨main⁩ ▸ ⁨java⁩ ▸ ⁨org⁩ ▸ ⁨apache⁩ ▸ ⁨cordova⁩ ▸ ⁨statusbar⁩ ▸ ⁨StatusBar.java)

// StatusBar.javathis.cordova.getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {// Clear flag FLAG_FORCE_NOT_FULLSCREEN which is set initially// by the Cordova.Window window = cordova.getActivity().getWindow();// 添加的内容开始window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.setStatusBarColor(Color.TRANSPARENT);window.setNavigationBarColor(Color.TRANSPARENT);// 添加的内容结束window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);// Read 'StatusBarBackgroundColor' from config.xml, default is #000000.setStatusBarBackgroundColor(preferences.getString("StatusBarBackgroundColor", "#000000"));// Read 'StatusBarStyle' from config.xml, default is 'lightcontent'.setStatusBarStyle(preferences.getString("StatusBarStyle", "lightcontent"));}});

写完这三部分的代码就可以实现图3中的透明悬浮状态栏效果。

总结:

我自己在做这个沉浸式状态栏的效果时,其实前两步就基本上可以实现沉浸式效果,不过在我手机(HONOR V9)上测试时需要手动触发一下,比如点击input框。添加第3步的代码是为了在App启动时就能实现沉浸式效果,具体代码含义我还没有搞懂。但这样做又有一个缺点,假如你执行了ionic cordova platform rm android命令后,我们更改的这个StatusBar.java文件就会被删除,重新添加Android平台支持后,就会出现我之前遇到的问题,需要手动触发。所以建议这个沉浸式状态栏效果放到项目的最后来做。

最后,特别感谢大BUG在这个过程中对我的帮助和鼓励。

参考文档:

Ionic4沉浸式状态栏透明悬浮:/qq_31384551/article/details/82222944#commentsedit;

Cordova 实现沉浸式(透明)状态栏效果:/u010730897/article/details/74450922

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。