优化应用以适用于 Chrome OS

Android 应用在重新定义大型屏幕上的现代计算方面发挥着重要作用。但仅仅在 Chromebook 上运行您的移动应用并不能为您的用户提供最佳体验。

此页面详细介绍了一些您可以根据笔记本电脑和可转换设备的外形规格定制体验的方法。请参阅我们的 全面测试列表,以了解有关测试应用在这些设备上的兼容性的更多信息。

利用对自由形式多窗口的支持

Android 应用在 Chrome OS 上的实现包括基本的多窗口支持。Android 应用在 Chrome OS 上渲染到自由形式的窗口容器中,而不是始终占用整个屏幕,这更适合这些设备。

用户可以调整包含 Android 应用的窗口的大小,如图 1 所示。要确保您的自由形式窗口平滑调整大小并向用户显示其所有内容,请阅读 窗口管理 中的指南。

图 1. 可调整大小的应用窗口。

您可以通过遵循以下最佳实践来改善应用在 Chrome OS 上运行时的用户体验

  • 在多窗口模式下正确处理 活动生命周期,并确保即使在应用不是最顶层聚焦窗口时也要继续更新 UI。
  • 确保您的应用在用户调整窗口大小时适当地调整其布局。
  • 通过指定其 启动大小来自定义应用窗口的初始尺寸。
  • 请注意,应用根活动的屏幕方向会影响其所有窗口。

自定义顶部栏颜色

Chrome OS 使用应用主题为显示在应用顶部的顶部栏着色,当用户按住窗口控件和后退按钮时会显示该顶部栏。为了使您的应用看起来精致并针对 Chrome OS 进行自定义,请在应用的主题中定义 colorPrimary,如果可能,还要定义 colorPrimaryDark 值。

colorPrimaryDark 用于为顶部栏着色。如果仅定义 colorPrimary,则 Chrome OS 会在顶部栏中使用其较暗的版本。有关更多信息,请参阅 样式和主题

支持键盘、触控板和鼠标

所有 Chromebook 都配有物理键盘和触控板,有些还配有触摸屏。某些设备可以从笔记本电脑转换为平板电脑形式。

在您的 Chrome OS 应用中,支持来自鼠标、触控板和键盘的输入,以便应用无需触摸屏即可使用。许多应用已支持鼠标和触控板,无需任何额外操作。但是,最好根据鼠标适当地自定义应用的行为,并支持和区分鼠标和触摸输入。

确保

  • 所有目标都可以用鼠标单击。
  • 所有触摸可滚动表面都在鼠标滚轮事件上滚动,如图 2 所示。
  • 悬停状态已谨慎实施,以改善 UI 发现,而不会让用户不堪重负,如图 3 所示。

图 2. 使用鼠标滚轮滚动。

图 3. 按钮悬停状态。

在适当的情况下,区分鼠标和触摸输入。例如,触摸并按住某个项目可能会触发多选 UI,而右键单击同一项目可能会触发选项菜单。

自定义光标

自定义应用程序的鼠标光标,以指示用户可以与 UI 的哪个元素交互以及如何交互。您可以通过调用 setPointerIcon() 方法,设置用户与视图交互时使用的 PointerIcon

在您的应用中,显示以下所有内容

  • 用于文本的 I 形光标
  • 可调整大小图层边缘的调整大小手柄
  • 用于可以通过点击和拖动手势平移或拖动的内容的开合手形光标
  • 处理微调器

PointerIcon 类提供了您可以用来实现自定义光标的 常量

键盘快捷键和导航

由于每台 Chromebook 都配有物理键盘,因此请提供热键以提高用户的工作效率。例如,如果您的应用支持打印,则可以使用 Control+P 打开打印对话框。

同样,使用 标签导航 处理所有重要的 UI 元素。这对于辅助功能尤其重要。为了满足辅助功能标准,所有 UI 表面都必须具有明显的且符合辅助功能的焦点状态,如下面的图所示

图 4. 横向标签。

图 5. 用悬停时显示的控件替换滑动手势。

确保为隐藏在特定于触摸的交互(例如触摸并按住操作、滑动或其他多点触控手势)下的核心功能实现键盘或鼠标替代方案。一种示例解决方案是在表面上悬停时提供按钮。

有关键盘、触控板和鼠标支持的更多信息,请参阅 大屏幕上的输入兼容性

进一步增强用户输入

为了实现应用程序的桌面级功能,请考虑以下面向生产力的输入。

上下文菜单

Android 上下文菜单是将用户带到应用程序功能的另一种加速器,可以通过单击鼠标或触控板的辅助按钮或通过触摸并按住触摸屏来触发。

图 6. 右键单击时出现的上下文菜单。

拖放

构建拖放交互(如以下图所示)可以为您的应用程序带来高效、直观的生产力功能。有关更多信息,请参阅 拖放

图 7. 文件树界面中的拖放。

触控笔支持

触控笔支持对于绘图和笔记应用至关重要。通过实现针对触控笔输入使用量定制的交互,为配备触控笔的 Chromebook 和平板电脑提供增强的支持。

在设计触控笔交互时,请考虑不同触控笔硬件的潜在差异。有关触控笔 API 的概述,请参阅 大屏幕上的输入兼容性

使您的布局响应式

无论应用程序的视觉状态(全屏、纵向、横向或窗口化)如何,都要充分利用可用的屏幕空间。一些良好的空间使用示例包括以下内容

  • 显示应用程序架构。
  • 将文本长度和图像大小限制为最大宽度。
  • 更好地利用应用程序工具栏中的空间。
  • 通过使应用程序适应鼠标使用而不是拇指使用来改进 UI 控件的放置。
  • 优化视频和图像的大小,为所有媒体建立一组最大宽度和高度,并最大限度地提高可读性和可扫描性。
  • 实现响应式列系统。有关更多信息,请参阅 响应式布局网格
  • 在需要时使用列系统调整和修改 UI。尽可能避免打开新窗口。
  • 删除或减少水平滚动组件的重要性。
  • 避免全屏模态 UI。对于所有非关键操作,请使用内联 UI,例如进度指示器和警报。
  • 使用改进的 UI 组件,例如时间和日期选择器、文本字段和菜单,这些组件专为鼠标、键盘和较大的屏幕而设计。
  • 对于小型到中型的编辑功能,请使用内联编辑、其他列或模态 UI 而不是新活动。
  • 删除或修改浮动操作按钮 (FAB) 以实现更好的键盘导航。默认情况下,FAB 在横向标签顺序中位于最后。相反,将其放在首位,因为它是最主要的动作,或者用另一个更高级别的控件替换它。

图 8. 手机和桌面大小屏幕上响应式布局的模拟。

系统级后退按钮是从 Android 的手持设备根源继承的一种模式,在桌面环境中不太适用。

随着您的应用越来越适合笔记本电脑环境,请考虑转向一种淡化后退按钮的导航模式。通过在其大屏幕 UI 中提供应用内后退按钮、面包屑或其他退出路线(如关闭或取消按钮)让应用处理其自己的历史堆栈。

您可以通过在 <activity> 标签内设置首选项来控制应用程序是否在其窗口中显示后退按钮。true 设置隐藏后退按钮。

<meta-data android:name="WindowManagerPreference:SuppressWindowControlNavigationButton" android:value="true" />

解决相机预览图像问题

当应用程序只能以纵向模式运行但用户在横向屏幕上运行它时,可能会出现相机问题。在这种情况下,预览或捕获的结果可能会被错误地旋转。

兼容性模式更改了系统处理 ChromeOS 中事件(例如方向更改)的方式。这有助于防止在错误的方向模式下使用相机时出现问题。要启用兼容性模式,请满足以下条件

  • 至少面向 Android 7.0(API 级别 24)。最低 SDK 级别可以更低。
  • 使您的应用程序可调整大小。

处理设备设置

请考虑在 ChromeOS 上运行的应用程序的以下设备设置。

更改音量

ChromeOS 设备是固定音量设备:播放声音的应用程序具有自己的音量控制。请遵循 使用固定音量设备 的指南。

更改屏幕亮度

您无法调整 ChromeOS 上的设备亮度。对 系统设置WindowManager.LayoutParams 的调用将被忽略。

其他学习资料

要了解有关优化您的 Android 应用以用于 Chromebook 的更多信息,请查阅以下资源