美文网首页
刘海屏适配

刘海屏适配

作者: 长点点 | 来源:发表于2023-05-14 14:02 被阅读0次

支持刘海屏
刘海屏是指某些设备显示屏上的一个区域延伸到显示面,这样既能为用户
提供全面屏体验,又能为设备正面的重要传感器留出空间。Android 在搭
载 Android 9(API 级别 28)及更高版本的设备上正式支持刘海屏。请注意,设备制造商也
可以选择在搭载 Android 8.1 或更低版本的设备上支持刘海屏。
本主题介绍如何实现对带刘海屏的设备的支持,包括如何处理“刘海区域”,即显示面上包含
刘海的无边框矩形。
在带刘海屏的设备上有什么要求
为了确保一致性和应用兼容性,搭载 Android 9 的设备必须确保以下刘海行为:
一条边缘最多只能包含一个刘海。
一台设备不能有两个以上的刘海。
设备的两条较长边缘上不能有刘海。
在未设置特殊标志的竖屏模式下,状态栏的高度必须至少与刘海的高度持平。
默认情况下,在全屏模式或横屏模式下,整个刘海区域必须显示黑边。
选择您的应用如何处理刘海区域
如果不希望您的内容与刘海区域重叠,请确保您的内容不与状态栏和导航栏重叠,这样做一
般就足够了。如果您要将内容呈现到刘海区域中,则可以使用WindowInsets.getDisplayCutout()来检索 DisplayCutout对象,该对象
包含每个刘海区域的安全边衬区和边界框。您可以使用这些 API 来检查您的内容是否与刘海
区域重叠,以便根据需要重新放置。
注意:要在多个 API 级别管理刘海实现,您还可以使用 AndroidX 库中的 DisplayCutoutCompat。
Android 还允许您控制是否在刘海区域内显示内容。窗口布局属性
layoutInDisplayCutoutMode

控制您的内容如何呈现在刘海区域中。您可以将 layoutInDisplayCutoutMode 设为以下某个
值:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT

  • 这是默认行为,如上所述。在竖屏模式下,内容会呈现到刘海区域中;但在横屏模式
    下,内容会显示黑边。
    LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
    )

  • 在竖屏模式和横屏模式下,内容都会呈现到刘海区域中。
    LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER

  • 内容从不呈现到刘海区域中。
    您可以通过编程或在 Activity 中设置样式来设置刘海模式。以下示例定义了一种样式,您可以使用它
    将 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 属性应用到 Activity。
    下面几部分更详细地介绍了不同的刘海模式。
    默认行为
    <style name="ActivityTheme">
    <item name="android:windowLayoutInDisplayCutoutMode">
    shortEdges
    </item>
    </style>

默认情况下,在未设置特殊标志的竖屏模式下,在带刘海屏的设备上,状态栏的大小会调整
为至少与刘海一样高,而您的内容会显示在下方区域。在横屏模式或全屏模式下,您的应用
窗口会显示黑边,因此您的任何内容都不会显示在刘海区域中。
将内容呈现在短边刘海区域中
对于某些内容(如视频、照片、地图和游戏),呈现在刘海区域中是一种很好的方法,这样
能够为用户提供沉浸感更强的全面屏体验。如果设置了
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

,则在竖屏模式和横屏模式下,内容都会延伸到显示屏的短边上的刘海区域,而不管系统栏
处于隐藏还是可见状态。请注意,窗口无法延伸到屏幕的长边上的刘海区域。使用此模式
时,请确保没有重要内容与刘海区域重叠。
请注意,Android 可能不允许内容视图与系统栏重叠。要替换此行为并强制内容延伸到刘海
区域,请通过 View.setSystemUiVisibility(int)

方法将以下任一标志应用于视图可见性:
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
SYSTEM_UI_FLAG_LAYOUT_STABLE
下面是一些 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 示例:
在竖屏模式下将内容呈现到刘海区域中
在横屏模式下将内容呈现到刘海区域中
请注意,边角处的刘海可等同于在短边上,因此适用同样的行为:
带边角刘海屏的设备
从不将内容呈现在刘海区域中
如果设置了 LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
,则不允许窗口与刘海区域重叠。
此模式应该用于暂时设置 View.SYSTEM_UI_FLAG_FULLSCREEN
或 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
的窗口,以避免在设置或清除了该标志时执行另一种窗口布局。
请查看下面的 LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 示例:
特殊模式
某些搭载 Android 8.1(API 级别 27)或更低版本的设备支持一种特殊模式,可让用户将显示
黑边的全屏或横屏应用延伸到刘海区域。此模式通常使用导航栏中的切换开关来控制,在延
伸屏幕之前会显示一个对话框,要求用户进行确认。
支持刘海屏的最佳做法
使用刘海屏 时,请务必
考虑以下几点:
不要让刘海区域遮盖任何重要的文本、控件或其他信息。
不要将任何需要精细轻触识别的交互式元素放置或延伸到刘海区域。刘海区域中的轻触
灵敏度可能要比其他区域低一些。
避免对状态栏高度进行硬编码,因为这样做可能会导致内容重叠或被切断。如有可能,
请使用 WindowInsetsCompat

检索状态栏高度,并确定要对您的内容应用的适当内边距。
不要假定应用会占据整个窗口,而应使用 View.getLocationInWindow()

来确认应用的位置。不要使用 View.getLocationOnScreen()

务必妥善处理进入或退出全屏模式。请阅读这篇 Android 开发者博文


对于竖屏模式下的默认刘海行为,如果刘海区域位于顶部边缘,并且窗口未设置
FLAG_FULLSCREEN

或 View.SYSTEM_UI_FLAG_FULLSCREEN

,则窗口可以延伸到刘海区域。同样,如果刘海区域位于底部边缘,并且窗口未设置
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

,则窗口可以延伸到刘海区域。在全屏模式或横屏模式下,窗口的布局方式应确保其不
与刘海区域重叠。
如果您的应用需要进入和退出全屏模式,请使用 shortEdges 或 never 刘海模式。默认
刘海行为可导致应用中的内容在全屏模式转换过程中上下移动,如下图所示:
在全屏模式下,在使用窗口坐标与屏幕坐标时应保持谨慎,因为在显示黑边的情况下,
您的应用不会占据整个屏幕。由于显示黑边,因此根据屏幕原点得到的坐标与根据窗口
原点得到的坐标不再相同。您可以根据需要使用 getLocationOnScreen()

将屏幕坐标转换为视图坐标。下图展示了内容显示黑边时这两种坐标有何不同:
处理 MotionEvent 时,请使用 MotionEvent.getX()和MotionEvent.getY()来避免类似的坐标问题。不要使用 MotionEvent.getRawX()或 MotionEvent.getRawY()。

在模拟器中模拟刘海屏
测试您的内容如何呈现
请务必测试应用的所有屏幕和体验。如有可能,在具有不同类型刘
海屏的设备上进行测试。如果您没有带刘海屏的设备,可以在搭载
Android 9 的任意设备或模拟器上模拟一些常见的刘海配置,具体操
作步骤如下:

  1. 启用开发者选项
  2. 在开发者选项屏幕中,向下滚动到绘制部分,然后选择模拟刘海屏。
  3. 选择刘海类型。
    其他资源

相关文章

  • 安卓适配

    ------刘海屏------屏幕适配 | Android 刘海屏适配总结Android刘海屏适配方案Androi...

  • 刘海屏的适配

    一、适配策略 非全屏状态下不需要适配刘海屏,刘海只占据 toolbar 的位置。 全屏时需要适配刘海屏 二、使用系...

  • iOS 判断是否为刘海屏

    在项目中刘海屏适配已是一种必然的事情. 下面是我适配刘海屏的一些经验 希望对你们有帮助

  • iOS开发 - 简单搞定iPhone刘海屏系列适配判断

    iPhone刘海屏系列适配判断 安全距离

  • 屏幕适配-刘海屏适配

    Android官方9.0刘海屏适配策略 1.如果非全屏模式(有状态栏),则app不受刘海屏影响,刘海屏的高度就是状...

  • 刘海屏适配

    非Android标准模式 全屏应用(内容延伸到StatusBar后面),获取状态栏高度,并在顶部添加适当的空白 非...

  • 刘海屏适配

    适配逻辑 对于有状态栏的页面不需要适配,因为刘海位置包含在状态栏高度中,我们需要适配的是没有状态栏的页面 适配流程...

  • Android 屏幕适配—刘海屏适配

    1、Google官方适配方案 非全屏模式下,刘海屏的高度等于状态栏的高度,此时我们不需要适配刘海屏, 全屏模式下,...

  • 屏幕适配【刘海屏适配】

    Android官方9.0刘海屏适配策略 如果非全屏(有状态栏),则app不受刘海屏的影响,刘海屏的高就是状态栏的高...

  • Android 屏幕适配之bug 刘海屏、水滴屏

    对刘海屏、水滴屏做适配前,先在此给出一个基本概念:何谓刘海屏?何谓水滴屏? 上述两种屏幕都可以统称为刘海屏,不过对...

网友评论

      本文标题:刘海屏适配

      本文链接:https://www.haomeiwen.com/subject/gadpsdtx.html