三级片在线

melody marks 肛交 让Android前端页面呈现iOS般的优雅之好意思!

哥哥去

你的位置:三级片在线 > 哥哥去 > melody marks 肛交 让Android前端页面呈现iOS般的优雅之好意思!


melody marks 肛交 让Android前端页面呈现iOS般的优雅之好意思!

发布日期:2024-10-03 16:25    点击次数:145

melody marks 肛交 让Android前端页面呈现iOS般的优雅之好意思!

标题:若何让安卓前端页面更显优雅melody marks 肛交

最近,方强人(崇之)在对安卓端的前端页面适配异形屏的决策进行调研时,发现了一些事理的景观,因此写下这篇回顾。

一、问题的建议

在安卓的前端适配中,咱们率先需要明确靠近的挑战。问题看似粗拙,与原生 UI 视图比拟,前端无法径直获取开发的一些控件信息,举例情景栏和导航栏的高度。若是开发是异形屏,前端也无法知谈挖孔或刘海的位置和尺寸。这意味着,若前端页面是全屏的,内容就可能被这些控件装璜。比拟之下,iOS 是若何处置这个问题的呢?早在 iOS 11 时,苹果便引入了 safe-area-inset-# 的办法,这是四个环境变量,通过 WebKit 提供。前端不错使用 env() 或已肃清的 constant() 函数来获取这些值,从而在四个方进取留出必要的 Padding,保证前端页面不会被其他控件装璜。咱们将这种智力称为 Safe Area。由于 Apple 早早援助这项功能,加上其新系统的提升率极高,前端适配也因此顺畅鼓吹。以钉钉为例,咫尺在 iOS 的娇傲后果显著优于安卓。

事理的是,安卓是否也有肖似的功能呢?谜底是战胜的。在 iOS 推出这个特质后,主流浏览器内核纷纷跟进。安卓用的实质上是 Chromium 内核,自 69 版块动手就援助这一智力。而钉钉使用的 UC 内核从 3.0 动手也纳入了援助。既然兼容性早已具备,为什么安卓却无法与 iOS 的后果皆头并进?主要原因在于浏览器内核版块的厌世。安卓的 Chromium 内核孤独打包为期骗,不错孤独更新,这带来了内核在安卓各品牌手机上存在的严重碎屑化问题,导致低系统版块的开发上无法援助理念念的智力。此外,安卓的 Safe Area 功能也存在 Bug,提供的值不异奇怪地酿成 0,固然浏览器内核具备功能,但庞大性也存有问题。即便该智力在安卓上顺利,最终展现的后果也巧合令东谈主舒畅。比如在横屏情景下,只给了左侧空间,顶部的情景栏区域却没留够 Padding。为何明明在 iOS 上粗拙的事情,在安卓上却频频出现问题,了解安卓系统若何提供 Safe Area 的值显得相等贫乏。

二、问题分析

色之阁

接下来,针对安卓系统对 Safe Area 援助的底层驱散进行分析。咱们使用的 WebView 位于 webkit 包下,这个包自 Android 4.4 就也曾肃清,实质智力通过 WebViewProvider 驱散。WebViewProvider 的原生驱散是 WebViewChromium,之后的分析著述不计其数,有兴味的读者不错自行查阅。在 WebViewChromium 中,咱们的 WebView 是一个传入的参数,在后续历程中具有贫乏的作用。在 WebViewChromium 启动化阶段,会构造 AwContents 对象,并传递咱们的 WebView,此类对本次问题关联不大,但在 WebView 智力的驱散上至关贫乏。与 Safe Area 磋议的是构造 AwDisplayCutoutController 对象,这个类负责处理安卓的 DisplayCutout 逻辑,也即是挖孔和刘海。在构造对象时,界说了一个 setDisplayCutoutSafeArea 智力,固然咫尺还不可急于搜检该智力驱散,咱们先找找它的使用场景:不错看到它在 AwDisplayCutoutController 构造时被调用,除了赋值,还有一个 registerContainerView 的智力,传入的即是咱们 WebView。这个智力的作用是在 WebView 上拔擢 OnApplyWindowInsetsListener 的监听,而这种设定时机早,之后若是拔擢了我方的监听就会袒护这个。

AwDisplayCutoutController 拔擢这个监听是为了触发我方的 onApplyWindowInsets 智力,在这个智力中,通过 WindowInsets 获取 DisplayCutout 的值并构造 Insets 对象,然后传给 onApplyWindowInsetsInternal 智力。若是 WindowInsets 中莫得 DisplayCutout,则不会持续膨大。在 onApplyWindowInsetsInternal 中,经过计较的 Insets 值将被传给 Delegate 的 setDisplayCutoutSafeArea 智力。这么一来,咱们不错详情前端赢得的 Safe Area 值来自 WindowInsets 的 DisplayCutout。为了考证这极少,不妨望望 C++ 的驱散,驱懒散现咱们最期待的 safe-area-inset-# 属性终于披露。至此,安卓端 Safe Area 的底层逻辑果决明晰。

三、回顾

总体来看,安卓端对前端 Safe Area 的援助,不过乎将 WindowInsets 中的 DisplayCutout 值传给前端,这种驱散面容却乍一看不太优雅。率先,View 只援助一个 OnApplyWindowInsetsListener 的监听,这个公开智力使得业务层无法齐备幸免干预,导致 safe-area-inset-# 属性常常“狼狈失效”。从代码凝视来看,谷歌已明慧到这个问题并经兴修设,但刻下尚未见讲求着实立版块。其次,安卓对 Safe Area 的庞大与咱们的预期不齐备一致,在 iOS 上,Safe Area 是指不会被系统组件、挖孔或刘海等装璜的区域,而在安卓中则仅消散挖孔和刘海,一朝开发横屏,内容又会鲁钝地跑到情景栏下。临了,以上分析仅适用于原生 WebView 的驱散,第三方内核如 UC 的 U4 并不适用。

四、适配建议

咫尺来看,安卓的 Safe Area 适配之路颇为侘傺。若仍但愿攻克这一难题,以下是我洽商的两种决策。不过,由于这些决策需要依赖系统的智力,需暖热开发的系统版块及后续 API 变化的影响。选定自界说参数则不消担忧 API 变更,但仅适用于自研适配的前端页面。两者各故意弊,若有更好的决策,接待巨匠共享猜想。

要而论之,安卓前端在适配时照旧得多加琢磨,既要享受本领带来的简短melody marks 肛交,也别忘了钻研背后的逻辑细节。通过操纵探索与实际,最终驱散一个兼容性更好的前端体验不再是梦念念。但愿改日有更多的处置决策登场,助力安卓前端页面的优雅呈现。



Powered by 三级片在线 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024