查看原文
其他

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

Android 谷歌开发者 2019-11-01

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

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


  • Google I/O 2019

    https://play.google.com/store/apps/details?id=com.google.samples.apps.iosched
  • 源代码
    https://github.com/google/iosched



尽享 Android Q 新功能


手势导航

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

  1. 将应用内容扩展到屏幕边缘

  2. 处理存在冲突的应用手势


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

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


  • 手势导航
    https://developer.android.google.cn/preview/features/gesturalnav
  • 《手势导航: 实现变到边的全屏体验》
    https://medium.com/androiddevelopers/gesture-navigation-going-edge-to-edge-812f62e4e83e
  • 相关代码
    https://github.com/google/iosched/commit/84ef129ef20cd87119edbb26ccaf1ab5aa58418b


深色主题背景

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

  • 深色主题背景

    https://developer.android.google.cn/preview/features/darktheme


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

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

深色主题背景下的日程表 UI


  • 专题分享
    https://www.youtube.com/watch?v=OCHEjeLC_UY
  • 初步实现
    https://github.com/google/iosched/commit/c635ca7abaf4bea91643a5568e360d227d459f94
  • 风格修复
    https://github.com/google/iosched/commit/317e0f98020ce10507cb3c6594c2133e139c4277
  • 更多更新
    https://github.com/google/iosched/commit/986c76164bf3df692f34af1276297aacdeaa8e10



日程界面优化


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


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

2019 I/O 应用允许用户直接跳转至另一个大会日


  • 将日程显示为单个列表
    https://github.com/google/iosched/commit/4ee7a1772f2b76b17533c5b14890811015d46160
  • 显示日期标识
    https://github.com/google/iosched/commit/23295883d0ef74bdc358ae8b5615dda33a6a6637


导航组件


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

  • 开发者可以在导航编辑器中一眼看到所有界面过渡,大幅简化了不同界面的启动活动。

  • 移除了向上/返回导航操作的样板代码

  • 使用 Safe Args Gradle 插件在各个 Fragment 之间传递静态类型的参数

  • 导航组件
    https://developer.android.google.cn/guide/navigation

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

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


  • 《导航组件入门指南》
    https://developer.android.google.cn/guide/navigation/navigation-getting-started
  • 添加 Gradle 依赖项和插件
    https://github.com/google/iosched/commit/3917256b8d8e55596d526e431c70008310012460
  • 迁移 MainActivity
    https://github.com/google/iosched/commit/2c3431369951824c42c8f5e20bb34fdaa0eae94d
  • 更新会话详情和次级导航结构
    https://github.com/google/iosched/commit/4baf5b5f4daa2a2d53e65a96b59dd90f80633a45
  • 禁用导航抽屉
    https://github.com/google/iosched/commit/6c69712ccb27f3875c19b9dfcc6946dd52c0e02c



使用 Room 实现全文搜索


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

查找某个讨论会或分享人


  • Room Jectpack
    https://developer.android.google.cn/training/data-storage/room
  • 全文搜索特性
    https://developer.android.google.cn/reference/androidx/room/Fts4
  • 使用 Room 添加搜索功能
    https://github.com/google/iosched/commit/e51008748d4a6c2ec6e2010f6348e9d1e138e717
  • 在搜索结果中包含分享人信息
    https://github.com/google/iosched/commit/365174615264c5ea99bbd72e29fe9230eb796807
  • 在搜索结果中包含 codelab 信息
    https://github.com/google/iosched/commit/1a1237b7366b5f717cf1914d82a34e16cf95c951
  • 添加 Room 迁移路径
    https://github.com/google/iosched/commit/3c933eae9be6a29b84b5de0d29348768cb168437



更多优化


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

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



探索源代码


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

  • 错误追踪页面
    https://github.com/google/iosched/issues



 点击屏末 | 阅读原文 | 前往 "Android Developers 官方文档" 查看更多信息

  想了解更多 Android 内容?


  • 在公众号首页发送关键词 “Android”,获取相关历史技术文章;

  • 还有更多疑惑?欢迎点击菜单 “联系我们” 反馈您在开发过程中遇到的问题。

推荐阅读




Modified on

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存