Google I/O 2019 Android 应用源代码现已发布

2,430 阅读5分钟

作者: Takeshi Hagikura, 开发者计划工程师

今年的 I/O 应用大幅修改了现有功能并添加了若干新特性。在这篇文章中,我们将着重围绕其中几项主要变更进行说明。

尽享 Android Q 新功能

手势导航

Android Q 引入了完全手势导航选项,允许用户通过手势动作返回上一级界面和主屏。为了支持手势导航支持,应用开发者需要做到以下两点:

  1. 将应用内容扩展到屏幕边缘
  2. 处理存在冲突的应用手势

Google I/O 2019 应用是首批完全支持手势导航的应用之一。更多内容,请阅读《手势导航: 实现边到边的全屏体验》系列连载,或请前往 Github 查看团队在 Google I/O 应用库中提交的相关代码,了解如何将应用内容扩展到屏幕边缘。

手势导航: 返回上一级界面和主屏

深色主题背景

Android Q 引入的另一项新特性是系统深色主题背景,它既可全局应用于 Android 系统界面,也可应用于设备上运行的应用。对于开发者而言,深色主题背景具备诸多优势,其中包括: 降低电耗;改善弱视以及对强光敏感的用户的可视性等。

如需支持夜间主题背景,您应用的主题应继承下面其中一个夜间主题:

<style name="AppTheme" parent="Theme.AppCompat.DayNight">
OR
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">

请避免使用硬编码颜色或图标,而是选用主题属性 (例如: ?android:attr/textColorPrimary) 或适合在夜间使用的资源 (例如: 在 res/values/colors.xml 和 res/values-night/colors.xml 中定义的颜色)。更多内容,请收看 Google I/O 大会上关于深色主题背景与手势导航的专题分享, 或查看 Github 上 Google I/O 应用库中团队所提交的三份代码 (初步实现风格修复以及更多更新),了解深色主题背景在真实应用中的具体实现方式。

日程界面优化

在 2018 年,大会日程的 UI 设计采用了标签界面,一个标签代表一个会议日,用户可通过竖屏滑动来查看不同的日程安排。今年的 I/O 应用更改了原先的 UI 设计,从而解决了若干可用性及性能问题。以 UI 流畅性为例,应用在日程表 UI 出现后就同时渲染所有标签内的 view,造成严重的 UI 卡顿问题,且延迟现象在低端设备上尤为明显。

新的日程 UI 采用单流开发,允许应用仅渲染可视内容,用户只需触击 UI 顶部的日期选项便可跳转至相应页面,并查看当天的议程安排。如果您想了解我们对日程表 UI 作出了哪些更改,请前往 Github 查看相关代码 (将日程显示为单个列表显示日期标识)。

导航组件

我们利用导航组件把今年的 I/O 应用简化为一个单 Activity 应用,这种方法具备下述优点:

  • 开发者可以在导航编辑器中一眼看到所有界面过渡,大幅简化了不同界面的启动活动。
  • 移除了向上/返回导航操作的样板代码
  • 使用 Safe Args Gradle 插件在各个 Fragment 之间传递静态类型的参数

请阅读《导航组件入门指南》,学习如何在应用中添加导航组件,或查看 Google I/O 2019 应用库中的相关代码 (添加 Gradle 依赖项和插件, 迁移 MainActivity, 更新会话详情和次级导航结构, 禁用导航抽屉),了解导航组件在真实应用中的具体用法。

在导航编辑器内查看所有过渡动画

使用 Room 实现全文搜索

我们为今年的大会应用添加了一个搜索功能,方便用户快速查找有关演讲、讲师和 codelab 的信息。在实现过程中,我们使用了 Room Jectpack 组件中的全文搜索特性。一旦从服务器获取最新的大会数据,我们就会对 Room 表格内的有关数据进行更新,每个 Room 表格都有对应的 FTS 映射表格。当用户在搜索框中输入要查找的内容后,检索项便会被用于查询演讲名称等数据。查询结果将立即显示在屏幕上,因此,如果搜索字段发生任何字符更改,服务器会马上返回更新后的结果。接着,用户便可以点击某个词条,导航至对应页面并获取详细内容。如果您对全文搜索有兴趣,欢迎查看我们的代码 (使用 Room 添加搜索功能在搜索结果中包含分享人信息在搜索结果中包含 codelab 信息添加 Room 迁移路径)。

查找某个讨论会或分享人

更多优化

除了以上关键变更以外,我们还对许多细节部分进行了优化与改进。比如说,我们添加了新的主屏 UI 和 Codelab UI,前者允许应用在大会期间向用户显示与时间相关的信息,后者则提供了更多 I/O 大会上与 codelab 有关的内容以及详细的参与方法。

Codelabs UI

主屏 UI
此外,我们还利用 Firebase Remote Config (远程配置) 来切换各个特性的显示。这样做的好处在于,我们无需更新整个应用,也不必移除用于表示议程 UI 中各个活动起始或结束时间的硬编码值,而是直接在 Remote Config 中更新 Boolean 值即可。

探索源代码

感兴趣的小伙伴不妨马上前往 Github 网站,尽情探索 2019 I/O 大会应用的源代码。欢迎大家留言,与我们分享您的想法与感受。如果您有任何疑问或问题,请通过 Github 的错误追踪页面提交报告。

点击前往 "Android Developers 官方文档" 查看更多信息