cordova实现沉浸式(透明)状态栏效果

来源:互联网 发布:linux select pipe 编辑:程序博客网 时间:2024/06/07 09:29

在cordova打包app的时候会需要进行状态栏的设置,可以采用cordova-plugin-statusbar插件,修改该插件的一些代码实现状态栏的设置。

***********以下部分转载自http://blog.csdn.net/u010730897/article/details/74450922**********

沉浸式状态栏(Immersive Mode)和透明状态栏(Translucent Bar)。

这两个概念很多地方的解释都不是很清晰,所以导致很多人都各有各的认识。所以这里我也有一个自己的认识,笔者认为沉浸式状态栏也可以说是全屏模式,即隐藏状态栏与导航栏。 而透明状态栏是不隐藏状态栏但是它所呈现的是透明的。因为默认情况下状态栏都是黑底白字。而我们现在要实现的就是透明状态栏下的全屏模式。话不多说,看效果: 

这里写图片描述 
这里写图片描述

对比这两张图的状态栏效果可以看出。第一张图效果对界面来说不是很美观,但是第二个效果就非常美观了。下面我们就来实现。

使用cordova实现就需要cordova-plugin-statusbar这个插件,我们需要对此插件进行一些修改即可实现我们想要的效果。

在项目路径->platforms->android->src->org->apache->cordova->statusbar中找到StatusBar.java文件。 
然后修改run方法即可:

public void run() {
  // Clear flag FLAG_FORCE_NOT_FULLSCREEN which is set initially by the Cordova.
  Window window = cordova.getActivity().getWindow();
  //添加内容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);
  //添加内容end
  window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
  // Read 'StatusBarBackgroundColor' from config.xml, default is #000000.
  //注释默认的设置背景色的方法 
  //setStatusBarBackgroundColor(preferences.getString("StatusBarBackgroundColor", "#000000"));
}

**********转载内容结束*************

在上面的代码中,可以看到WindowManager.LayoutParams对象的一些操作。WindowManager.LayoutParams是WindowManager接口的嵌套类,用于向WindowManager描述Window的管理策略。主要成员变量包括

Window flag系列

该系列主要用于对Window的flag进行设置。设置Window的flag,可以直接对Window的getAttributes()得到其 WindowManager.LayoutParams对象,然后直接对它flag变量操作。也可以Window的addFlags(int flags)方法,setFlags(int flags, int mask)方法,clearFlags(int flags)方法进行操作。

比如设置全屏: Window window = getWindow(); 
 WindowManager.LayoutParams winParams = win.getAttributes();
 winParams.flags=winParams.flags|WindowManager.LayoutParams.FLAG_FULLSCREEN;
 或 window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 或 window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
取消全屏 Window window = getWindow(); 
 winParams.flags=winParams.flags&~WindowManager.LayoutParams.FLAG_FULLSCREEN;
 或 window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
 或 window.setFlags(0, WindowManager.LayoutParams.FLAG_FULLSCREEN);

softInputMode系列

该系列主要用于表示softInputMode,我们可以通过WindowManager.LayoutParams的softInputMode变量直接进行设置。softInputMode只能是一个显示软键盘时的window调整方式bite与一个控制软键盘显示状态的bite的组合。
显示软键盘时的window调整方式可以是SOFT_INPUT_ADJUST_NOTHING,SOFT_INPUT_ADJUST_PAN,
SOFT_INPUT_ADJUST_RESIZE,SOFT_INPUT_ADJUST_UNSPECIFIED之一。
用于描述软键盘显示的规则可以是SOFT_INPUT_STATE_ALWAYS_HIDDEN,SOFT_INPUT_STATE_ALWAYS_VISIBLE,
SOFT_INPUT_STATE_HIDDEN,SOFT_INPUT_STATE_VISIBLE,SOFT_INPUT_STATE_UNSPECIFIED之一

其他的具体类型可以参加网址[2]


参考网址

[1] http://blog.csdn.net/u010730897/article/details/74450922

[2] http://hubingforever.blog.163.com/blog/static/171040579201175111031938/

阅读全文
0 0
原创粉丝点击