Android P 中的新文本特性
在 “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” 的讨论视频:https://www.youtube.com/watch?v=x-FcOX6ErdI&feature=youtu.be
?点击屏末?|?阅读原文?|?前往?“Android Developers 官方文档”?查看更多信息
推荐阅读
·?Android P Beta 3
现已发布!
·?应用迁移至 Android P 操作指南
·?Android 模拟器现已支持 AMD 处理器和 Hyper-V
文章来源:https://blog.csdn.net/jILRvRTrc/article/details/81140407