Android 8.0 为用户和开发者引入多种新功能。本文重点介绍面向开发者的一部分新功能。
请务必查阅 android 8.0 行为变更以了解平台变更可能影响您的应用的领域。
用户体验
自动调整TextView的大小
Android 8.0 允许您根据 TextView 的大小自动设置文本展开或收缩的大小。这意味着,在不同屏幕上优化文本大小或者优化包含动态内容的文本大小比以往简单多了。如需了解有关如何在 Android 8.0 中自动调整 TextView 的大小的详细信息,请参阅自动调整 TextView 的大小。
自适应图标
Android 8.0 引入自适应启动器图标。自适应图标支持视觉效果,可在不同设备型号上显示为各种不同的形状。要了解如何创建自适应图标,请参阅自适应图标预览功能指南。
统一的布局内边距和外边距
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
的值。您可以自行设置这些值和新的垂直与水平布局属性来创建取决于文本方向的布局行为。
findViewById()签名变更
现在,findViewById()
函数的全部实例均返回 <T extends View> T
,而不是 View
。此变更会带来以下影响:
- 例如,如果
someMethod(View)
和someMethod(TextView)
均接受调用findViewById()
的结果,这可能导致现有代码的返回类型不确定。 - 在使用 Java 8 源语言时,这需要在返回类型不受限制时(例如,
assertNotNull(findViewById(...)).someViewMethod())
)显式转换为View
。 - 重写非最终的
findViewById()
函数(例如,Activity.findViewById()
)将需要更新其返回类型。
智能文本选择
在兼容设备上,Android 8.0 让应用可以帮助用户以更有意义的方式与文本交互。当用户长按某个实体中可识别格式的单词(例如某个地址或餐馆名称)时,系统会选中整个实体。用户会看到一个浮动工具栏,该工具栏包含可以处理所选文本实体的应用。例如,如果系统识别出某个地址,它可以将用户导向地图应用。
系统识别的实体包括地址、网址、电话号码和电子邮件地址。如需了解详细信息,请参阅 TextClassifier
。
指纹手势
您的无障碍服务也可以响应替代的输入机制,即沿设备的指纹传感器按特定方向滑动(上、下、左和右)。要接收有关这些交互的回调,请完成以下一系列步骤:
- 声明
USE_FINGERPRINT
权限和CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES
功能。 - 在
android:accessibilityFlags
属性中设置FLAG_REQUEST_FINGERPRINT_GESTURES
标志。 - 使用
registerFingerprintGestureCallback()
注册回调。
请记住,并非所有设备都包含指纹传感器。您可以使用 isHardwareDetected()
函数识别设备是否支持此传感器。即使对于包含指纹传感器的设备,您的服务也只有在指纹传感器不用于身份验证目的时才可使用它。要识别此传感器何时可用,请调用 isGestureDetectionAvailable()
函数并实现 onGestureDetectionAvailabilityChanged()
回调。
提示文本
Android 8.0 包含可用于与文本可编辑对象的提示文本进行交互的多个函数:
isShowingHintText()
和setShowingHintText()
函数分别显示和设置节点的当前文本内容是否表示节点的提示文本。如果节点不包含可编辑文本,则它不应包含提示文本。- 要访问提示文本本身,请使用
getHintText()
。即使某个对象当前未显示提示文本,系统也能成功调用getHintText()
。
权限
Android 8.0 引入了多个与电话有关的新权限:
ANSWER_PHONE_CALLS
允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用acceptRingingCall()
函数。READ_PHONE_NUMBERS
权限允许您的应用读取设备中存储的电话号码。
参考文档
https://developer.android.com/about/versions/oreo/android-8.0