Android 8.0 Oreo (用户体验篇)
Android 8.0 Oreo 更智能、更迅捷、更强大。广受世人喜爱的不仅仅是曲奇饼干,更是为您打造的全新 Android 系统。Android 8.0 为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。
本篇文章主要从用户体验角度分析Android 8.0 行为变更。主要涉及以下内容
通知
自动填充框架
画中画模式
API 变更
可下载字体
XML 中的字体
自动调整 TextView 的大小
自适应图标
颜色管理
WebView API 变更
固定快捷方式和小部件
最大屏幕纵横比
多显示器支持
统一的布局外边距和内边距
指针捕获
应用类别
Android TV 启动器
AnimatorSet
输入和导航
视图默认焦点
欢迎关注微信公众号:程序员Android
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
1.通知
在 Android 8.0 中,Google 已重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的方式。这些变更包括:
通知渠道
Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。用户界面将通知渠道称之为通知类别。要了解如何实现通知渠道的信息,请参阅通知渠道指南。
通知标志
Android 8.0 引入了对在应用启动器图标上显示通知标志的支持。通知标志可反映某个应用是否存在与其关联、并且用户尚未予以清除也未对其采取行动的通知。通知标志也称为通知点。要了解如何调整通知标志,请参阅通知标志指南。
用户可以长按应用启动器图标以查看 Android 8.0 中的通知
用户可以长按应用启动器图标以查看 Android 8.0 中的通知
休眠
用户可以将通知置于休眠状态,以便稍后重新显示它。重新显示时通知的重要程度与首次显示时相同。应用可以移除或更新已休眠的通知,但更新休眠的通知并不会使其重新显示。
通知超时
现在,使用 setTimeoutAfter()
创建通知时您可以设置超时。您可以使用此函数指定一个持续时间,超过该持续时间后,通知应取消。如果需要,您可以在指定的超时持续时间之前取消通知。
通知设置
Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
Intent 从通知创建指向应用通知设置的链接时,您可以调用 setSettingsText()
来设置要显示的文本。此系统可以提供以下 Extra 数据
和 Intent
,用于过滤应用必须向用户显示的设置:EXTRA_CHANNEL_ID、NOTIFICATION_TAG
和 NOTIFICATION_ID
。
通知清除
系统现在可区分通知是由用户清除,还是由应用移除。要查看清除通知的方式,您应实现 NotificationListenerService
类的新 onNotificationRemoved()
函数。
通知背景颜色
您现在可以设置和启用通知的背景颜色。只能在用户必须一眼就能看到的持续任务的通知中使用此功能。例如,您可以为与驾车路线或正在进行的通话有关的通知设置背景颜色。您还可以使用 Notification.Builder.setColor()
设置所需的背景颜色。这样做将允许您使用 Notification.Builder.setColorized()
启用通知的背景颜色设置。
8 .通知消息样式
现在,使用 MessagingStyle
类的通知可在其折叠形式中显示更多内容。对于与消息有关的通知,您应使用MessagingStyle
类。您还可以使用新的 addHistoricMessage()
函数,通过向与消息相关的通知添加历史消息为会话提供上下文。
2. 自动填充框架
帐号创建、登录和信用卡交易需要时间并且容易出错。在使用要求执行此类重复性任务的应用时,用户很容易遭受挫折。
Android 8.0 通过引入自动填充框架,简化了登录和信用卡表单之类表单的填写工作。在用户选择接受自动填充之后,新老应用都可使用自动填充框架。
您可以采取某些措施,优化您的应用使用此框架的方式。如需了解详细信息,请参阅自动填充框架概览。
3. 画中画模式
Android 8.0 允许以画中画 (PIP)
模式启动操作组件。PIP
是一种特殊的多窗口模式,最常用于视频播放。
目前,PIP 模式可用于 Android TV,而 Android 8.0 则让该功能可进一步用于其他 Android 设备。
当某个 Activity
处于 PIP 模式时,它会处于暂停onPause()
状态,但仍应继续显示内容。因此,您应确保您的应用在 onPause()
处理程序中进行处理时不会暂停播放。相反,您应在onStop()
中暂停播放视频,并在 onStart()
中继续播放。如需了解详细信息,请参阅多窗口生命周期。
要指定您的 Activity 可以使用 PIP 模式,请在AndroidManifest.xml
清单中将 android:supportsPictureInPicture
设置为 true
。
注意:
android:resizeableActivity 设置为 true
;
4. API 变更
Android 8.0 引入一种新的对象 PictureInPictureParams,您可以将该对象传递给 PIP 函数来指定某个 Activity 在其处于 PIP 模式时的行为。此对象还指定了各种属性,例如操作组件的首选纵横比。
现在,在添加画中画中介绍的现有 PIP 函数可用于所有 Android 设备,而不仅限于 Android TV。
此外,Android 8.0 还提供以下函数来支持 PIP 模式:
Activity.enterPictureInPictureMode
将操作组件置于画中画模式。操作组件的纵横比和其他配置设置均由args
指定。如果 args
中的任何字段为空,系统将使用您上次调用 Activity.setPictureInPictureParams()
时所设置的值。PIP
模式的 Activity
将进入暂停状态,但仍保持已启动状态。如果用户点按此PIP
操作组件,系统将显示一个菜单供用户操作,而在操作组件处于 PIP 状态期间,不会理会任何触摸事件。
Activity.setPictureInPictureParams():
更新操作组件的 PIP 配置设置。如果操作组件目前处于 PIP 模式,则会更新此设置;如果操作组件的纵横比发生变化,这非常有用。如果操作组件不处于 PIP 模式,则会使用这些配置设置,而不会考虑您调用的 enterPictureInPictureMode()
函数。
5. 可下载字体
Android 8.0 和 Android 支持库 26 允许您从提供程序应用请求字体,而无需将字体绑定到 APK 中或让 APK 下载字体。此功能可减小 APK 大小,提高应用安装成功率,使多个应用可以共享同一种字体。
如需了解有关下载字体的详细信息,请参阅 可下载字体。
6. XML 中的字体
Android 8.0 推出一项新功能,即 XML 中的字体,允许您使用字体作为资源。这意味着,不再需要以资产的形式捆绑字体。字体在 R 文件中编译,并且作为一种资源,可自动用于系统。然后,您可以利用一种新的资源类型 font 来访问这些字体。
在运行 API 版本 14 及更高版本的设备中,支持库 26 对此功能提供完全支持。
如需了解有关以资源形式使用字体以及检索系统字体有关的详细信息,请参阅 XML 中的字体
7. 自动调整 TextView 的大小
Android 8.0 允许您根据 TextView
的大小自动设置文本展开或收缩的大小。这意味着,在不同屏幕上优化文本大小或者优化包含动态内容的文本大小比以往简单多了。如需了解有关如何在 Android 8.0 中自动调整 TextView
的大小的详细信息,请参阅自动调整 TextView 的大小。
8. 自适应图标
Android 8.0 引入自适应启动器图标。自适应图标支持视觉效果,可在不同设备型号上显示为各种不同的形状。要了解如何创建自适应图标,请参阅自适应图标预览功能指南
9. 颜色管理
图像应用的 Android 开发者现在可以利用支持广色域彩色显示的新设备。要显示广色域图像,应用需要在其清单(每个操作组件)中启用一个标志,并加载具有嵌入的广域彩色配置文件(AdobeRGB、Pro Photo RGB、DCI-P3 等)的位图。
10. WebView API 变更
Android 8.0 提供多种 API,帮助您管理在应用中显示网页内容的 WebView
对象。这些 API 可增强应用的稳定性和安全性,它们包括:
Version API
Google SafeBrowsing API
Termination Handle API
Renderer Importance API
要详细了解如何这些 API,请参阅管理 WebView。
11. 固定快捷方式和小部件
Android 8.0 引入了快捷方式和微件的应用内固定功能。在您的应用中,您可以根据用户权限为支持的启动器Launcher
创建固定的快捷方式和小部件。
如需了解详细信息,请参阅固定快捷方式和微件预览功能指南。
12. 最大屏幕纵横比
以 Android 7.1(API 级别 25)或更低版本为目标平台的应用默认的最大屏幕纵横比为 1.86。针对 Android 8.0 或更高版本的应用没有默认的最大纵横比。如果您的应用需要设置最大纵横比,请使用定义您的操作组件的清单文件中的 maxAspectRatio 属性
13.多显示器支持
从 Android 8.0 开始,此平台为多显示器提供增强的支持。如果 Activity
支持多窗口模式,并且在具有多显示器的设备上运行,则用户可以将 Activity
从一个显示器移动到另一个显示器。当应用启动 Activity
时,此应用可指定 Activity
应在哪个显示器上运行。
注:
每次只有一个 Activity 可以处于继续状态,即使此应用具有多个显示器。具有焦点的 Activity 将处于继续状态,所有其他可见的 Activity 均暂停,但不会停止。如需了解有关当多个 Activity 可见时活动生命周期的详细信息,请参阅多窗口生命周期。
当用户将Activity
从一个显示器移动到另一个显示器时,系统将调整 Activity
大小,并根据需要发起运行时变更。您的 Activity
可以自行处理配置变更,或允许系统销毁包含该Activity
的进程,并以新的尺寸重新创建它。如需了解详细信息,请参阅处理配置变更。
ActivityOptions
提供两个新函数以支持多个显示器:
setLaunchDisplayId()
getLaunchDisplayId()
对 adb shell
进行了扩展,以支持多个显示器。shell start
命令现在可用于启动操作组件,并指定操作组件的目标显示器:
adb shell start <activity_name> --display <display_id>
14. 统一的布局外边距和内边距
Android 8.0 让您可以更轻松地指定View
元素的对边使用相同外边距和内边距的情形。具体来说,您现在可以在布局XML
文件中使用以下属性:
layout_marginVertical
,同时定义layout_marginTop
和layout_marginBottom
。
layout_marginHorizontal
,同时定义layout_marginLeft
和layout_marginRight
。
paddingVertical
,同时定义paddingTop
和paddingBottom
。
paddingHorizontal
,同时定义paddingLeft
和paddingRight
。
注:
15. 指针捕获
某些应用(例如游戏、远程桌面和虚拟化客户端)将大大受益于鼠标指针控制。指针捕获是 Android 8.0 中的一项新功能,可以通过将所有鼠标事件传递到您的应用中焦点视图的方式提供此类控制。
从 Android 8.0 开始,您的应用中的 View 可以请求指针捕获并定义一个侦听器来处理捕获的指针事件。鼠标指针在此模式下将隐藏。如果不再需要鼠标信息,该视图可以释放指针捕获。系统也可以在视图丢失焦点时(例如,当用户打开另一个应用时)释放指针捕获。
如需了解有关如何在您的应用中使用此功能的信息,请参阅指针捕获
16. 应用类别
在适当的情况下,Android 8.0 允许每个应用声明其所属的类别。这些类别用于将应用呈现给用户的用途或功能类似的应用归类在一起,例如按流量消耗、电池消耗和存储消耗将应用归类。您可以在 <application>
清单标记中设置 android:appCategory
属性,定义应用的类别。
17. Android TV 启动器
Android 8.0 添加了一种以内容为中心的全新 Android TV 主屏幕体验,支持 Android TV 模拟器和 Nexus Player Android 8.0 设备映像。新的主屏幕在对应于频道的行中组织视频内容,这些频道在系统上通过应用填充各个节目。应用可以发布多个频道,用户可以配置他们希望在主屏幕上看到哪些频道。Android TV 也包含一个 Watch Next 行,此行根据用户的观看习惯从应用填充节目。应用也可以提供视频预览,这些预览会在用户聚焦到节目时自动播放。用于填充频道和节目的 API 属于 TvProvider API,这些 API 以 Android 支持库模块的形式随 Android 8.0 分发。
18. AnimatorSet
从 Android 8.0 开始,AnimatorSet API
现在支持寻道和倒播功能。寻道功能允许您将动画的位置设置为指定的时间点处。如果您的应用包含可撤消的操作的动画,倒播功能会很有用。现在,您不必定义两组独立的动画,而只需反向播放同一组动画。
19. 输入和导航
键盘导航键区
包含 5 个键区的操作组件
如果您的应用中,某个操作组件使用一种复杂的视图层次结构(如上图 所示),可考虑将多组界面元素组成一个键区,简化键盘导航这些元素的操作。用户可以在 Chromebook 设备上按 Meta+Tab 或 Search+Tab,在不同键区之间导航。键区的一些范例包括:侧面板、导航栏、主内容区域和可能包含多个子元素的元素。
要将一个 View 或 ViewGroup 元素设置为一个键区,请在元素的布局 XML 文件中将 android:keyboardNavigationCluster
属性设置为 true,或者将 true 传递至应用界面逻辑中的 setKeyboardNavigationCluster()
。
注:
在具有触摸屏的设备中,您可以将某个键区指定的 ViewGroup 对象的 android:touchscreenBlocksFocus
元素设置为 true,仅允许从键区导航进入和离开此键区。如果您将此配置应用于某个键区,用户将无法使用 Tab 键或箭头键导航进入或离开此键区,而是必须按键区导航键盘组合键
20. 视图默认焦点
在 Android 8.0 中,您可以指定在(重新)创建的操作组件继续运行并且用户按下键盘导航键(例如 Tab 键)之后应接收焦点的 View
。要应用“设为默认焦点”设置,请在包含界面元素的布局 XML 文件中将 View 元素的 android:focusedByDefault
属性设置为 true,或者将 true 传递至应用界面逻辑中的 setFocusedByDefault()
。
至此,Android 8.0 行为变更的用户体验篇已基本结束,如需获取更多信息,请关注微信公众号
欢迎关注微信公众号:程序员Android
微信公众号:ProgramAndroid
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
点击阅读原文,获取更多福利