如何动态兼容沉浸式状态栏模式

html-css017

如何动态兼容沉浸式状态栏模式,第1张

由于各系统版本的限制,沉浸式状态栏对系统有要求(Android4.4及以上、iOS7.0及以上),如果要兼容各系统版本,需要动态判断当前环境是否支持沉浸式状态栏以及系统状态栏的高度:

使用5+API

- 判断当前环境是否支持沉浸式状态栏

plus.navigator.isImmersedStatusbar()

如果当前支持沉浸式状态栏则返回true,否则返回false。

- 获取当前系统状态栏高度

plus.navigator.getStatusbarHeight()

获取系统状态栏高度,Number类型。

其单位是逻辑像素值,即css中可直接使用的像素值,可能存在小数点。

实际用法参考HelloH5应用的“plus/doc.html”:

// 创建加载内容窗口

var topoffset='45px'

if(plus.navigator.isImmersedStatusbar()){// 兼容immersed状态栏模式

// 获取状态栏高度并根据业务需求处理,这里重新计算了子窗口的偏移位置

topoffset=(Math.round(plus.navigator.getStatusbarHeight())+45)+'px'

}

// 使用偏移位置创建子窗口

wc=plus.webview.create(null,'doccontent',{top:topoffset,bottom:'0px',bounce:'vertical',bounceBackground:'#FFFFFF'})

通过userAgent判断

5+API需要在plusready事件后才能调用,通常此事件在DOM加载渲染后才会触发,无法再渲染前根据不同的状态来设置css。

为了解决此问题,在支持5+API运行环境的userAgent中特定字段Html5Plus/1.0后添加Immersed标识,如下:

"Html5Plus/1.0 (Immersed/30)"

其中Immersed/后的30表示状态栏的高度,单位为逻辑像素值。

可以使用正则表达式进行获取:

var immersed = 0

var ms=(/Html5Plus\/.+\s\(.*(Immersed\/(\d+\.?\d*).*)\)/gi).exec(navigator.userAgent)

if(ms&&ms.length>=3){ // 当前环境为沉浸式状态栏模式

immersed=parseFloat(ms[2])// 获取状态栏的高度

}

immersed值如果大于0则表示当前环境支持沉浸式状态栏。

获取状态栏高度后,可以使用js动态修改DOM元素的css属性来设置样式,如设置界面头区域的顶部内边距为状态栏的高度(避免系统状态栏与界面头重叠),示例如下:

var t=document.getElementById('header')

t&&t.style.paddingTop=immersed+'px'

具体项目中可根据界面设计,灵活使用immersed值来动态适配各种效果。

完整用法可参考HelloH5应用中的“js/immersed.js”

在Android4.4设备上支持沉浸式状态栏,只需要添加values-v19/styles.xml 下添加

?

1

2

<code class="language-xml hljs "><style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" type="text/css"><item name="android:windowTranslucentNavigation">false</item>

<item name="android:windowTranslucentStatus">true</item></style></code>

然后在可以扩展的控件添加属性android:fitsSystemWindows="true"

就阔以了。

但在MIUI V6下如果扩展的颜色比较浅,会导致状态栏的文字无法看清。在其他ROM上会有渐变的灰色区域。

MIUI提供了新的解决方案,在MIUI V6上状态栏支持灰黑色和白色两种字体颜色,开发者可以直接设置当前界面状态栏的文字颜色。

具体代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

<code class="language-java hljs ">/**

* 只支持MIUI V6

* @param context

* @param type 0--只需要状态栏透明 1-状态栏透明且黑色字体 2-清除黑色字体

*/

public static void setStatusBarTextColor(Activity context,int type){

if (!isMiUIV6()){

DebugLog.d("isMiUIV6:"+false)

return

}

DebugLog.d("isMiUIV6:"+true)

Window window = context.getWindow()

Class clazz = window.getClass()

try {

int tranceFlag = 0

int darkModeFlag = 0

Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams")

Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_TRANSPARENT")

tranceFlag = field.getInt(layoutParams)

field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE")

darkModeFlag = field.getInt(layoutParams)

Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class)

if (type == 0){

extraFlagField.invoke(window, tranceFlag, tranceFlag)//只需要状态栏透明

}else if(type == 1){

extraFlagField.invoke(window, tranceFlag | darkModeFlag, tranceFlag | darkModeFlag)//状态栏透明且黑色字体

}else {

extraFlagField.invoke(window, 0, darkModeFlag)//清除黑色字体

}

}catch (Exception e){

}

}

private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name"

private static boolean isMiUIV6() {

try {

final BuildProperties prop = BuildProperties.newInstance()

String name = prop.getProperty(KEY_MIUI_VERSION_NAME, "")

if ("V6".equals(name)){

return true

}else {

return false

}

//return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null

//|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null

//|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null

} catch (final IOException e) {

return false

}

}</code>

年轻"曜"出彩,10万级运动轿跑思皓曜迎来新春抢购潮

自广州车展上市后,思皓曜凭借高颜值、年轻化的造型、轿跑的运动性能、卓越的操控性以及丰富的智能科技,迅速夺得多数年轻人的眼球,在轿跑市场上形成了热烈的反响。

新春将至,思皓曜人气火爆,众多年轻客户选择思皓曜作为自己的新年礼物。为感谢用户支持,金华江瑞体验店邀请新老客户齐聚一堂,共同分享思皓曜的驾乘感受。

"掀背+溜背"设计年轻动感时尚

思皓曜采用掀背式结构设计,兼顾了流畅的溜背造型和宽大的后备箱;"掀背+溜背"的造型,0.26的超低风阻系数,动感造型和经济性能兼备。长/宽/高分别为4780mm/1820mm/1492mm,轴距2770mm,为用户带来越级的内部驾乘感受。值得一提的是,思皓曜还特别在后排顶部做了巧妙的凹槽设计,显著提升了后排的顶部空间,使得后排乘坐空间非常宽敞、舒适。

思皓曜采用全新锋动美学设计,分体式的格栅造型,层次分明,"獠牙"式保杠设计,充满狂野气息。贯穿式的灯带将犀利的前灯组形成一个整体,在橙黑色特殊涂装的掩映下,形成了独特的视觉观感。五透镜矩阵式贯穿LED流星灯,内置142颗LED光源,修长锐利,最大照射距离达100米;181颗九游九星布阵LED光源小颗粒,极具未来与神秘感。

思皓曜做工用料考究,T形布局悬浮式多媒体屏幕、四幅式多功能方向盘、换挡拨片、双拼色内饰、钢琴烤漆面板、镀铬条点缀、赛道座椅,彰显舒适、品质和竞技活力。

思皓曜还具有light智能光语系统,车灯随音乐律动,前142后181颗LED光源,40秒超长灯舞,灯光辉映,带来极致视听盛宴。

酷炫动感燃爆运动激情

年轻人对速度与激情充满渴望,思皓曜搭载了1.5TGDI白金动力,匹配湿式双离合自动变速箱,传动效率高达96%,1800rpm即达峰值扭矩300N·M,完美做到最佳动力输出与最经济的燃油消耗,百公里综合油耗仅6.98L。

思皓曜Race版配备运动套件,十足运动风;配载18寸轮胎,轮毂采用熏黑条幅回旋设计,搭配红色运动卡钳,进一步凸显思皓曜的轿跑运动基因。

思皓曜Race版还提供酷炫的运动排气选装,包括车道动效、表盘转速、车模行驶动效、空调吹面、引擎声浪等多场景联动,带给用户真实赛道的沉浸式模拟体验。

全面智能科技满足Z世代全新需求

作为年轻人的智能轿跑,思皓曜全面推进智能科技应用,以更好的满足以互联网为显著标签的Z世代年轻用户全新需求。

思皓曜联合科大讯飞、华为、博世等行业顶级合作伙伴,深度开发应用全面智能科技。

思皓曜搭载同级唯一APA全自动泊车系统,采用TI双核主芯片,支持多种传感器融合;4颗100万高清像素广角摄像头、12颗同频长距超声波雷达以及纵横向控制单元,确保思皓曜可全自动完成水平、垂直、斜列等多种车位的泊车。

思皓曜具备L2级智能驾驶辅助功能,ACC自适应巡航、AEB自动紧急制动、LDW车道偏离报警、FCW前碰撞预警、BSD盲点监测等12项功能让驾驶更智能、更安心。

思皓曜的车联网和语音控制系统同样领先,搭载科大讯飞最新语音系统,语音识别准确率高达95%,并带来毫秒级的快速响应;具有语音交互全链路能力,可自主学习丰富词库;唤醒90S内连续对话,用户可以在任一时间打断,发出需求;自适应声源定位,主驾、副驾获得各自服务体验可实现自定义唤醒词、主副驾声源定位等领先功能,语音识别更加精准,并且覆盖用户从上车到停车全场景共272项功能。

根据年轻人的喜好,思皓曜还配备数字钥匙功能,蓝牙钥匙与NFC钥匙并存,有电没电一样用;只需带上手机,当靠近车辆的时候自动解锁,坐上车一键启动,离开车自动落锁;一部手机就能玩转一辆车。

思皓曜高配车型还搭载了CSS儿童遗落安全监测系统,通过超声波监测车内生命特征,及时向车主发出警报信息,避免意外发生。

自成立以来,思皓乘用车就一直践行"用户思维",本次展开的团购会也是思皓乘用车不断回馈用户的一个缩影。

思皓曜作为面向年轻用户的智能轿跑,思皓曜动感时尚的造型、酷炫的运动激情、卓越的操控性能和全面的智能技术,也必将成为更多Z世代用户的理想选择。