关联的显示屏可将桌面窗口体验扩展到标准手机,让用户能够通过移动设备访问大屏幕。这项功能为应用互动和用户效率开辟了新途径。
桌面窗口化功能的所有独特功能都适用于已连接的显示屏。将手机连接到显示屏后,手机的状态保持不变,并且已连接的显示屏上会启动一个空白桌面会话。设备和显示屏就像两个独立的系统,每个显示屏都有自己的应用。
如果您将支持桌面窗口化功能的设备(例如平板电脑)连接到外接显示器,桌面会在两个显示屏上展开。然后,这两个显示屏会作为一个连续的系统运行。这种设置允许窗口、内容和光标在两个显示屏之间自由移动。
为了有效支持联网显示屏,您需要注意应用设计和实现的几个方面。以下最佳实践可确保顺畅高效的用户体验。
处理动态显示更改
许多应用在构建时都假定 Display
对象及其特性在应用生命周期内不会发生变化。不过,当用户连接或断开外接显示器,甚至在显示屏之间移动应用窗口时,与应用上下文或窗口关联的底层 Display
对象可能会发生变化。显示屏的属性(例如尺寸、分辨率、刷新率、HDR 支持和密度)可能各不相同。例如,如果您根据手机屏幕对值进行硬编码,您的布局可能会在外部显示屏上损坏。
外部显示屏的像素密度也可能截然不同。您需要确保应用能够正确响应密度变化。这涉及为布局使用密度无关像素 (dp)、提供特定于密度的资源,以及确保界面适当缩放。
使用正确的上下文
在多显示屏环境中,使用适当的上下文至关重要。访问资源时,activity 上下文(已显示)与应用上下文(未显示)不同。
activity 上下文包含有关显示屏的信息,且始终会针对该 activity 所在的显示屏区域进行调整。这样,您便可以获得有关应用的显示屏密度或窗口指标的正确信息。请始终使用 activity 上下文(或其他基于界面的上下文)来获取有关当前窗口或显示屏的信息。此外,这还会影响某些使用上下文提供的信息的系统 API。
获取显示信息
您可以使用 Display
类获取有关特定显示屏的信息,例如显示屏尺寸或指示显示屏是否安全的标志。如需获取可用显示屏,请使用 DisplayManager
系统服务:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()
管理 activity 启动和配置
借助关联的显示屏,应用可以指定在启动或创建其他 activity 时它应该在哪个显示屏上运行。此行为取决于清单文件以及 intent 标志和选项(由启动 activity 的实体设置)中定义的 activity 启动模式。
当 activity 移至辅助显示屏时,您的应用可能会经历上下文更新、窗口大小调整以及配置和资源更改。如果由该 activity 来处理配置更改,它会在 onConfigurationChanged()
中收到通知。如果不是,它会重新启动。
如果为 activity 选择的启动模式支持多个实例,那么在辅助屏幕上启动将会创建一个新的 activity 实例。这两个 activity 会同时恢复,这对某些多任务场景来说非常有用。
您可以使用 ActivityOptions
在特定显示屏上启动 activity:
val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId)
startActivity(intent, options.toBundle())
避免使用设备许可名单
应用有时会通过许可名单或检查内置显示屏尺寸,将大屏幕界面和功能限制为仅适用于特定设备。在联网显示屏时代,这种方法已不再有效,因为几乎所有新设备都可以连接到大屏幕。设计应用时,应使其能够自适应各种屏幕尺寸和密度。
支持外部外围设备
当用户连接到外接显示屏时,他们通常会创建更类似于桌面环境的环境。这通常涉及使用外接键盘、鼠标、触控板、摄像头、麦克风和音箱。您需要确保您的应用能够与这些外围设备无缝配合使用。这包括处理键盘快捷键、管理鼠标指针互动、正确支持外部摄像头或麦克风,以及遵循音频输出路由。如需了解详情,请参阅大屏幕上的输入兼容性。
提高用户工作效率
联网显示屏提供了显著的机会来提高用户工作效率。现在,您可以使用这些工具构建可提供与桌面应用相当的体验的移动应用。不妨考虑实现以下功能,以提高用户工作效率:
- 允许用户打开同一应用的多个实例。这对于比较文档、管理不同的对话或同时查看多个文件等任务非常有用。
- 让用户能够通过拖放在应用内和应用外共享丰富的数据。
- 通过实现强大的状态管理系统,帮助用户在配置更改后维护其工作流。
遵循这些准则并利用提供的代码示例,您可以打造能够顺畅适应联网显示屏的应用,为用户提供更丰富、更高效的体验。