Android 8.0 Oreo
更智能、更迅捷、更强大。广受世人喜爱的不仅仅是曲奇饼干,更是为您打造的全新 Android
系统。Android 8.0
为用户和开发者引入多种新功能。本文重点介绍面向开发者的新功能。
请务必查阅Android 8.0
行为变更以了解平台变更可能影响您的应用的领域。
本篇文章主要从用户体验角度分析Android 8.0
行为变更。主要涉及以下内容
- 通知
- 自动填充框架
- 画中画模式
- API 变更
- 可下载字体
- XML 中的字体
- 自动调整 TextView 的大小
- 自适应图标
- 颜色管理
- WebView API 变更
- 固定快捷方式和小部件
- 最大屏幕纵横比
- 多显示器支持
- 统一的布局外边距和内边距
- 指针捕获
- 应用类别
- Android TV 启动器
- AnimatorSet
- 输入和导航
- 视图默认焦点
微信公众号:ProgramAndroid欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
1.通知
在Android 8.0
中,Google
已重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的方式。这些变更包括:
- 通知渠道
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 8.0 开始,如果您打算在 Android TV 或其他 Android 设备上支持 PIP 模式,则无需将android:resizeableActivity 设置为 true
;
只有在您的 Activity 支持其他多窗口模式时,才需要设置 android:resizeableActivity。
4. API 变更
Android 8.0
引入一种新的对象PictureInPictureParams
,您可以将该对象传递给PIP
函数来指定某个 Activity
在其处于PIP
模式时的行为。此对象还指定了各种属性,例如操作组件的首选纵横比。
现在,在添加画中画中介绍的现有PIP
函数可用于所有 Android
设备,而不仅限于Android TV
。
此外,Android 8.0
还提供以下函数来支持PIP
模式:
- Activity.enterPictureInPictureMode
(PictureInPictureParams args):
将操作组件置于画中画模式。操作组件的纵横比和其他配置设置均由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 支持多窗口模式,则 Android 8.0 将为该 Activity 自动启用多显示器支持。您应测试您的应用,确保它在多显示器环境下可正常运行。
每次只有一个 Activity
可以处于继续状态,即使此应用具有多个显示器。具有焦点的Activity
将处于继续状态,所有其他可见的Activity
均暂停,但不会停止。如需了解有关当多个 Activity
可见时活动生命周期的详细信息,请参阅多窗口生命周期。
当用户将Activity
从一个显示器移动到另一个显示器时,系统将调整 Activity
大小,并根据需要发起运行时变更。您的 Activity
可以自行处理配置变更,或允许系统销毁包含该Activity
的进程,并以新的尺寸重新创建它。如需了解详细信息,请参阅处理配置变更。
ActivityOptions
提供两个新函数以支持多个显示器:
-
setLaunchDisplayId()
指定 Activity 在启动后应显示在哪个显示器上。 -
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
。
-
注:
如果您自定义应用逻辑以支持不同语言和文化(包括文本方向),请记住,这些属性不会影响 layout_marginStart、layout_marginEnd、paddingStart 或 paddingEnd 的值。您可以自行设置这些值和新的垂直与水平布局属性来创建取决于文本方向的布局行为。
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
元素视为键区
在具有触摸屏的设备中,您可以将某个键区指定的ViewGroup
对象的 android:touchscreenBlocksFocus
元素设置为true,
仅允许从键区导航进入和离开此键区。如果您将此配置应用于某个键区,用户将无法使用Tab
键或箭头键导航进入或离开此键区,而是必须按键区导航键盘组合键
20. 视图默认焦点
在Android 8.0
中,您可以指定在(重新)创建的操作组件继续运行并且用户按下键盘导航键(例如 Tab
键)之后应接收焦点的 View
。要应用“设为默认焦点”设置,请在包含界面元素的布局 XML
文件中将View
元素的 android:focusedByDefault
属性设置为true
,或者将true
传递至应用界面逻辑中的 setFocusedByDefault()
。
至此,Android 8.0
行为变更的用户体验篇已基本结束,如需获取更多信息,请关注微信公众号
感谢您的阅读,谢谢!
微信公众号:ProgramAndroid欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
点击阅读原文,获取更多福利
网友评论