前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android P 中的新文本特性

Android P 中的新文本特性

作者头像
Android 开发者
发布2018-08-02 15:39:07
1.5K0
发布2018-08-02 15:39:07
举报
文章被收录于专栏:Android 开发者

由开发推广专员 Florina Muntenescu 和 Android 文本技术主管 Siyamed Sinir 发布

在 “What’s new in Android P Beta” 中我们已经谈到 Android 的两个新文本特性。现在既然 Android P Beta 3最终 API均已推出 ,我们也该深入地探究它究竟有哪些新文本特性。众所周知, TextView 是 Android 视图系统中最关键的组件之一。这也是我们一直在面向开发者及用户的特性及 API 改进方面投资的原因。

PrecomputedText

文本展示非常复杂,其涵盖的特性有:多种字体、行间距、字间距、文本方向、断行、字符连接等。为了测量及布局给定文本,TextView 必须做很多工作,例如读取字体文件、查找字形、决定形状、测量边界框以及将文本缓存在内部文本缓存中。更重要的是,所有这些工作都在 UI 线程中进行,这就有可能导致 app 帧数下降。

我们发现文本测量花费的时间占据文本设置的90%。为解决这一问题,在 Android P 中,以及作为 Jetpack 的一部分,我们推出了一个新的 API: PrecomputedText。该 API 早先在 API 14中便可以通过 PrecomputedTextCompat 访问。

PrecomputedText 能够使 app 可以事先甚至在后台线程中执行文本布局最耗费时间的部分工作,以缓存布局结果,并返回宝贵的测量数据。然后 可以在 TextView 中设置 PrecomputedText.create(CharSequence, params) 的结果。这样,只有大约10%的工作留给 TextView 执行。

△ 测量及布局文本花费的时间比例

放大器(Magnifier)

即使有像智能文本选择这样的特性,精准的文本选择还是有些困难。Android P 推出了文本放大器,以提升文本选择方面的用户体验。由于该放大器提供了可以在文本上方拖拽的文本放大面板,所以有助于用户精准地定位光标或文本选择手柄。

△ 在 Android P 中放大文本 我们想让用户在所有 app 中都拥有相同的体验,无论是在定制窗口小部件中还是在定制文本呈现时,我们设置了一个放大器窗口小部件,因此附加在窗口上的任何视图可以利用该部件。该放大器窗口小部件可以提供任何视图或界面的放大版本,不仅仅是文本。

放大器有3种主要方法:show、update 及 dismiss。例如,您可以在实现定制视图onTouchEvent 处理时调用这些方法。这样放大器就可以跟随用户在屏幕上的手指移动。

Smart Linkify

Linkify 类自 API 1以来一直存在,它允许运用正则表达式为文本添加链接。除此之外,它会调用 WebView 的实例来查找物理地址,这样可能会降低请求链接的 app 的性能。为了能提供更准确的链接,尤其对于国际化文本,以及消除 WebView 造成的性能降低,我们创建了 Smart Linkify。它可以通过 TextClassifier API 进行访问。

Smart Linkify 使用机器学习算法及模型识别文本中的实体。这种方式提高了实体识别的可靠性。Smart Linkify 可以根据实体类别来对用户可采取的操作提出建议。比如,如果Smart Linkify 识别到电话号码,便会给出建议,比如发送文本短信、打电话或添加到通讯录。

△ Android P 中的 Smart Linkify 为提高 app 的性能,可以将链接的生成及应用工作放到后台线程中。

行高及基线文本对齐

有时设计者提供给开发者的布局参数与现有的 TextView 属性不完全匹配。在 Android P 及 Jetpack 中,我们增加了三个属性及其相应方法,以弥合由设计者与开发者工作方式的不同带来的分歧。

设置行高

在 Android P 之前,行间距可以由 lineSpacingExtra 及 lineSpacingMultiplier 属性控制。然而,设计者通常会使用一个简单的行高来设置这些值。为此,在 Android P 上,我们增加了 lineHeight 属性以设置文本行高,即行顶部与底部之间的间距(或两个连续的基线之间的间距)。实际上,该属性利用及更改了现有的 lineSpacingExtra 及 lineSpacingMultiplier 属性。

△ 行高及字体大小

设置基线文本对齐

为控制首行及末行基线与视图边界之间的间距,我们增加了两个新属性: firstBaselineToTopHeight 与 lastBaselineToBottomHeight。

firstBaselineToTopHeight: 设置 TextView 的上边界及 TextView 的首行基线之间的间距。该属性实际上更改的是顶部边距。

lastBaselineToBottomHeight: 设置 TextView 的下边界及 TextView 的末行基线之间的间距。该属性实际上更改的是底部边距。

△ 首行基线到顶部及末行基线到底部的距离

文本在大部分 app 中都扮演着重要角色,它是 app 设计语言的关键组成部分。文本由用户使用,甚至用于呈现表情符号。我们将持续在文本上投资,以提升 app 用户及开发者的体验。

如果想了解更多文本 API 的使用及 Android P 的新文本特性,请查看 Google I/O 2018 关于 “Best practices with text” 的讨论视频

点击这里前往 “Android Developers 官方文档” 查看更多信息

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年07月20日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PrecomputedText
  • 放大器(Magnifier)
  • Smart Linkify
  • 行高及基线文本对齐
  • 设置行高
  • 设置基线文本对齐
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档