ionic1.x 版本的透明状态栏的实现
来源:互联网 发布:rs485数据采集系统 编辑:程序博客网 时间:2024/06/05 19:55
实现效果:
1.安装cordova-plugin-statusbar插件
cordova plugin add https://github.com/apache/cordova-plugin-statusbar.git
2.修改插件的底层代码,进入platforms->android->src->org->apache->cordova->statusbar中找到StatusBar.java文件。然后修改run方法即可:
将run方法里面的代码替换成以下代码,兼容版本是android 4.4以上。
// Clear flag FLAG_FORCE_NOT_FULLSCREEN which is set initially // by the Cordova. Window window = cordova.getActivity().getWindow(); /** * remark zqh * 修改透明状态栏,兼容android4.4以上版本 */ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ //添加内容start 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); }else{ //透明状态栏 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }
修改后,运行项目就可以实现透明状态栏了。
补充:以上方式发现在有些机型会出现问虚拟键遮挡底部导航栏并与透明状态栏冲突问题,所以想出了以下的方式进行适配。
注释原来方式的代码,在platform/android/src/com/…/MainActivity中加入以下代码。
/** * 判断底部navigator是否已经显示 * @return * @paramwindowManager */ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public static boolean hasSoftKeys(WindowManager windowManager) { Display d = windowManager.getDefaultDisplay(); DisplayMetrics realDisplayMetrics = new DisplayMetrics(); d.getRealMetrics(realDisplayMetrics); int realHeight = realDisplayMetrics.heightPixels; int realWidth = realDisplayMetrics.widthPixels; DisplayMetrics displayMetrics = new DisplayMetrics(); d.getMetrics(displayMetrics); int displayHeight = displayMetrics.heightPixels; int displayWidth = displayMetrics.widthPixels; return (realWidth - displayWidth) > 0 || (realHeight - displayHeight) > 0; } /** * 处理虚拟键手机遮挡底部导航栏并与透明状态栏冲突问题 */ public void dealSoftKeys() { if (hasSoftKeys(getWindowManager())) { //有虚拟键的取消状态栏渲染防止底部导航栏被虚拟键遮挡 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } } else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0实现全屏 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); //5.0设置颜色 getWindow().setStatusBarColor(Color.TRANSPARENT); getWindow().setNavigationBarColor(Color.TRANSPARENT); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //4.4实现全屏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } } }
最后在onCreate函数中调用 dealSoftKeys();
作者:ZQH24
阅读全文
0 0
- ionic1.x 版本的透明状态栏的实现
- 透明状态栏的实现
- android 4.4版本以上透明状态栏的简单实现
- Android透明状态栏的实现
- 状态栏的透明效果实现
- 沉浸式状态栏(变色状态栏、透明状态栏)的实现
- Android:透明状态栏的效果实现
- Android之简单的实现透明状态栏
- app透明/沉浸状态栏的实现方案
- Android透明状态栏的实现方法
- android 实现透明的沉浸式状态栏
- 安卓透明状态栏的实现
- Android 沉浸式状态栏的实现方法、状态栏透明
- Android 沉浸式状态栏的实现方法、状态栏透明。
- Android 沉浸式状态栏的实现方法、状态栏透明
- Android 沉浸式状态栏的实现方法、状态栏透明
- Android 沉浸式状态栏的实现方法、状态栏透明
- Android 沉浸式状态栏的实现方法、状态栏透明
- hdu 2066 一个人的旅行
- exports 和 module.exports 的区别
- nginx 配置备忘
- nginx相关
- Java——反射
- ionic1.x 版本的透明状态栏的实现
- Intel SGX
- 报错The project was not built due to "A resource exists with a different case: '/xxx/bin/classes/com
- 【安全牛学习笔记】SSL、TLS中间人攻击
- JS不允许手动设置请求头的cookie
- 图形编程之 OpenGL ES 2.0 —— 从我们的世界到他们的世界 (5)
- Thirft框架快速入门
- java基础知识
- 我的第一个python web开发框架(4)——数据库结构设计与创建