Android 刘海屏的适配与处理
刘海屏:
刘海屏是指某些设备显示屏上的一个区域延伸到显示面,这样既能为用户提供全面屏体验,又能为设备正面的重要传感器留出空间。Android 在搭载 Android 9(API 级别 28)及更高版本的设备上正式支持刘海屏。请注意,设备制造商也可以选择在搭载 Android 8.1 或更低版本的设备上支持刘海屏
在带刘海屏的设备上有什么要求
为了确保一致性和应用兼容性,搭载 Android 9 的设备必须确保以下刘海行为:
- 一条边缘最多只能包含一个刘海。
- 一台设备不能有两个以上的刘海。
- 设备的两条较长边缘上不能有刘海。
- 在未设置特殊标志的竖屏模式下,状态栏的高度必须至少与刘海的高度持平。
- 默认情况下,在全屏模式或横屏模式下,整个刘海区域必须显示黑边。
如何处理刘海区域:
要将内容呈现到刘海区域中,则可以使用WindowInsets.getDisplayCutout()来检索DisplayCutout对象
View decorView = getWindow().getDecorView();
if (decorView != null) {
WindowInsets insets= decorView.getRootWindowInsets();
}
如果不希望内容与刘海区域重叠,请确保您的内容不与状态栏和导航栏重叠
窗口布局属性layoutInDisplayCutoutMode控制您的内容如何呈现在刘海区域中:
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT - 这是默认行为,如上所述。在竖屏模式下,内容会呈现到刘海区域中;但在横屏模式下,内容会显示黑边。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES - 在竖屏模式和横屏模式下,内容都会呈现到刘海区域中。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER - 内容从不呈现到刘海区域中。
将内容呈现在短边刘海区域中
对于某些内容(如视频、照片、地图和游戏),呈现在刘海区域中是一种很好的方法,这样能够为用户提供沉浸感更强的全面屏体验
如果设置了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_NEVER,则不允许窗口与刘海区域重叠。
此模式应该用于暂时设置View.SYSTEM_UI_FLAG_FULLSCREEN或View.SYSTEM_UI_FLAG_HIDE_NAVIGATION的窗口,以避免在设置或清除了该标志时执行另一种窗口布局。
支持刘海屏的最佳做法
1.不要让刘海区域遮盖任何重要的文本、控件或其他信息。
2.不要将任何需要精细轻触识别的交互式元素放置或延伸到刘海区域。刘海区域中的轻触灵敏度可能要比其他区域低一些。
3.避免对状态栏高度进行硬编码,因为这样做可能会导致内容重叠或被切断。如有可能,请使用WindowInsetsCompat检索状态栏高度,并确定要对您的内容应用的适当内边距。
WindowInsets insets= getWindow().getDecorView().getRootWindowInsets();
if (insets==null)
return;
int stateTop=insets.getStableInsetTop();
int windowTop=insets.getSystemWindowInsetTop();
4.不要假定应用会占据整个窗口,而应使用View.getLocationInWindow()来确认应用的位置。不要使用View.getLocationOnScreen()。
5.如果您的应用需要进入和退出全屏模式,请使用shortEdges或never刘海模式。默认刘海行为可导致应用中的内容在全屏模式转换过程中上下移动
6.在全屏模式下,在使用窗口坐标与屏幕坐标时应保持谨慎,因为在显示黑边的情况下,您的应用不会占据整个屏幕。由于显示黑边,因此根据屏幕原点得到的坐标与根据窗口原点得到的坐标不再相同。您可以根据需要使用getLocationOnScreen()将屏幕坐标转换为视图坐标
本文仅代表作者观点,版权归原创者所有,如需转载请在文中注明来源及作者名字。
免责声明:本文系转载编辑文章,仅作分享之用。如分享内容、图片侵犯到您的版权或非授权发布,请及时与我们联系进行审核处理或删除,您可以发送材料至邮箱:service@tojoy.com



