Android系统层强制应用根据重感横竖屏显示
需求场景描述
公司生产了一款12.03的学习平板(大部分场景是横屏使用),需要将那些强制竖屏显示的应用,也可以根据重力感应横屏显示 如(如:夸克浏览器)
实现思路
DisplayContent
是 Android 系统中一个重要的类,它在窗口管理器(Window Manager)中扮演着关键的角色。它用于管理一个显示设备上的窗口和界面元素,并负责处理显示相关的操作。以下是
DisplayContent
的主要作用:
-
窗口管理:
DisplayContent
负责管理一个显示设备上的所有窗口,包括应用窗口、系统窗口、对话框等。它维护窗口的层级、布局、尺寸和可见性等信息。 -
窗口层级: 通过
DisplayContent
,系统可以确定每个窗口在显示上的层级关系,即哪个窗口位于其他窗口之上或之下。 -
窗口布局和尺寸:
DisplayContent
确保窗口在显示上正确布局,并根据窗口的尺寸和位置将其渲染到对应的屏幕区域。 -
窗口状态管理: 窗口的状态,例如最小化、最大化、活动、非活动等,由
DisplayContent
进行管理和维护。 -
窗口交互: 通过
DisplayContent
,系统可以响应用户与窗口的交互操作,例如拖动、缩放、点击等。 -
窗口动画:
DisplayContent
负责处理窗口之间的动画效果,如窗口打开、关闭、切换等动画。 -
多显示设备支持: 在多显示设备环境下,每个显示设备都有一个对应的
DisplayContent
实例,用于管理该设备上的窗口和显示操作。 -
系统级界面管理: 系统级的界面元素,如状态栏、导航栏等,也由
DisplayContent
进行管理。 -
界面刷新:
DisplayContent
负责将窗口的内容绘制到显示设备上,以实现界面的刷新和呈现。 -
显示设备属性: 通过
DisplayContent
,系统可以获取和管理显示设备的属性,如分辨率、方向、DPI等。
DisplayRotation
是 Android 系统中的一个类,它用于管理显示设备的旋转操作。在移动设备中,用户可以旋转设备以适应不同的屏幕方向,例如从竖直方向切换到水平方向。DisplayRotation
负责跟踪显示设备的旋转状态,并通知系统和应用程序相应的变化。以下是
DisplayRotation
的主要作用:
-
屏幕旋转管理:
DisplayRotation
跟踪用户旋转设备时的操作,包括从横屏切换到竖屏或反之。它记录当前的屏幕方向以及可能的旋转偏好。 -
应用程序适应: 应用程序可以根据设备的旋转状态调整其用户界面,以确保在不同方向下都能够正确显示和布局。
DisplayRotation
通知应用程序关于设备旋转的信息,从而使应用能够适应不同的方向。 -
系统界面适应: 系统级的界面元素,如状态栏和导航栏,也需要根据屏幕方向进行调整。
DisplayRotation
负责确保这些界面元素在旋转时的正确呈现。 -
触摸事件映射: 屏幕旋转可能会影响触摸事件的坐标映射。
DisplayRotation
确保触摸事件在旋转时正确映射到屏幕坐标。 -
显示内容旋转: 一些应用或界面元素可能需要以特定的方向显示其内容。
DisplayRotation
通过通知应用程序或界面元素的旋转状态,帮助它们调整内容的显示方向。 -
用户体验: 通过管理设备的旋转,
DisplayRotation
提供了更好的用户体验,使用户可以根据实际需要调整屏幕方向,而不会影响应用的正常运行。 -
多显示设备支持: 在多显示设备环境下,每个显示设备可能有不同的旋转状态。
DisplayRotation
确保每个显示设备都可以独立进行旋转。
综上理解:屏幕旋转时候,窗口画面横竖屏主要是由DisplayRotation与DisplayContent来控制
实现步骤
1:找到 DisplayContent中的updateOrientation(boolean forceUpdate)的函数发现orientation = getOrientation();
private boolean updateOrientation(boolean forceUpdate) {
final int orientation =