专栏名称: 鸿洋
你好,欢迎关注鸿洋的公众号,每天为您推送高质量文章,让你每天都能涨知识。点击历史消息,查看所有已推送的文章,喜欢可以置顶本公众号。此外,本公众号支持投稿,如果你有原创的文章,希望通过本公众号发布,欢迎投稿。
目录
相关文章推荐
stormzhang  ·  特斯拉画的饼,圆上了? ·  14 小时前  
鸿洋  ·  PackageManagerService和 ... ·  3 天前  
鸿洋  ·  鸿蒙版 React Native ... ·  6 天前  
今天看啥  ›  专栏  ›  鸿洋

2024 了, Insets 你不会还不懂吧?

鸿洋  · 公众号  · android  · 2024-10-09 08:35

主要观点总结

本文主要讨论了App端Insets的相关源码,包括Insets的定义、来源、分发过程以及相关的源码分析。Insets描述的是显示屏幕上的一些矩形区域,这些区域是系统UI所在的区域,常见的有StatusBar、NavigationBar、IME等。App端需要关注Insets是因为Activity的显示区域可能会和Insets重叠。源码中Insets类用于描述一个Insets对象,包括left、top、right、bottom四个属性。文章还探讨了Insets的来源,以及App如何获取和使用Insets。此外,还介绍了InsetsState和InsetsSourceControl的分发过程,以及dispatchApplyInsets和onControlsChanged方法的实现。最后,给出了相关类的类图。

关键观点总结

关键观点1: Insets的定义和来源

Insets描述的是显示屏幕上的一些矩形区域,这些区域是系统UI所在的区域,如StatusBar、NavigationBar、IME等。App端需要关注Insets是因为Activity的显示区域可能会和Insets重叠。

关键观点2: Insets的源码分析

源码中Insets类用于描述一个Insets对象,包括left、top、right、bottom四个属性。文章还探讨了Insets的来源,以及App如何获取和使用Insets。

关键观点3: InsetsState和InsetsSourceControl的分发过程

InsetsState保存了系统中所有的Insets的状态/信息,通过dispatchApplyInsets方法分发Insets给View。InsetsSourceControl用于控制Insets的显示与隐藏,通过onControlsChanged方法分发InsetsSourceControl。

关键观点4: dispatchApplyInsets和onControlsChanged方法的实现

dispatchApplyInsets方法用于计算Insets并分发给View,onControlsChanged方法用于分发InsetsSourceControl。


文章预览

本文主要聚焦于 App 端的 Insets(不是 WMS 端),从以下几个问题入手 Insets 相关的源码。 什么是 Insets ? Insets 来自哪里 Insets 如何分发给 View 1 什么是 Insets ? Insets 在中文语境中,没有一个特别准确的对应词,Google 的文档以及博客将其翻译为 边衬区 。 Insets 描述的是显示屏幕上的一些矩形区域,这些区域是系统 UI 所在的区域,常见的有 StatusBar NavigationBar IME(输入法)等。 既然是系统 UI,那为什么 App 端还需要去关注 Insets 呢?Activity 如果进行了显示方面的配置,Activity 的显示区域可能就会和 Insets 重叠。 比如我们配置了全屏的主题: android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 或者配置了 window 的全屏 flag: requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                 WindowManager.LayoutParams.FLAG_FULL ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览