天天看点

android 8.0 新功能特性

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

指纹手势

您的无障碍服务也可以响应替代的输入机制,即沿设备的指纹传感器按特定方向滑动(上、下、左和右)。要接收有关这些交互的回调,请完成以下一系列步骤:

  1. 声明 

    USE_FINGERPRINT

     权限和 

    CAPABILITY_CAN_REQUEST_FINGERPRINT_GESTURES

     功能。
  2. 在 

    android:accessibilityFlags

     属性中设置 

    FLAG_REQUEST_FINGERPRINT_GESTURES

     标志。
  3. 使用 

    registerFingerprintGestureCallback()

     注册回调。

请记住,并非所有设备都包含指纹传感器。您可以使用 

isHardwareDetected()

 函数识别设备是否支持此传感器。即使对于包含指纹传感器的设备,您的服务也只有在指纹传感器不用于身份验证目的时才可使用它。要识别此传感器何时可用,请调用 

isGestureDetectionAvailable()

 函数并实现 

onGestureDetectionAvailabilityChanged()

 回调。

提示文本

Android 8.0 包含可用于与文本可编辑对象的提示文本进行交互的多个函数:

  • isShowingHintText()

     和 

    setShowingHintText()

     函数分别显示和设置节点的当前文本内容是否表示节点的提示文本。如果节点不包含可编辑文本,则它不应包含提示文本。
  • 要访问提示文本本身,请使用 

    getHintText()

    。即使某个对象当前未显示提示文本,系统也能成功调用 

    getHintText()

权限

Android 8.0 引入了多个与电话有关的新权限:

  • ANSWER_PHONE_CALLS

     允许您的应用通过编程方式接听呼入电话。要在您的应用中处理呼入电话,您可以使用 

    acceptRingingCall()

     函数。
  • READ_PHONE_NUMBERS

     权限允许您的应用读取设备中存储的电话号码。

这些权限均被划分为危险类别,属于 

PHONE

 权限组。

参考文档

https://developer.android.com/about/versions/oreo/android-8.0