专栏首页Android 开发者Android P 中的新文本特性

Android P 中的新文本特性

由开发推广专员 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 官方文档” 查看更多信息

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 恢复 RecyclerView 的滚动位置

    您可能在开发过程中遇到过这种情况,在 Activity/Fragment 被重新创建后,RecyclerView 丢失了它之前保有的滚动位置信息。通常这种情况发...

    Android 开发者
  • Now in Android | 11 月刊 · 2019

    欢迎大家来到 Now in Android 栏目,本栏目将专注于为开发者们提供近期值得关注的 Android 开发热点内容。

    Android 开发者
  • 适配可折叠设备,您的应用准备好了吗?

    我们在 11 月初举办了 Android 开发者峰会,并在会上宣布 Android 将对折叠屏设备 (Foldable) 提供原生支持,帮助开发者为三星等硬件合...

    Android 开发者
  • 海量短文本场景下的去重算法

    在大多数情况下,大量的重复文本一般不会是什么好事情,比如互相抄袭的新闻,群发的垃圾短信,铺天盖地的广告文案等,这些都会造成网络内容的同质化并加重数据库的存储负担...

    腾讯QQ大数据
  • 锚文本具体有那些作用?

    很多人都知道锚文本,但是很多人都不确切锚文本究竟改看看,一般做锚文本分为车站内做锚文本和站外锚文本,锚文本只不过是链接的一种方式,那么明确锚文本有那些作用呢?上...

    申霖
  • 海量文本用 Simhash, 2小时变4秒! | 文本分析:大规模文本处理(2)

    这是一个相似匹配的问题(文本相似匹配基础→ 词频与余弦相似度)。但是,亿级数据库,用传统的相似度计算方法太慢了,我们需要一个文本查询方法,可以快速的把一段文本的...

    数说君
  • 文本挖掘 – Text mining

    文本摘要:许多文本挖掘应用程序需要总结文本文档,以便对大型文档或某一主题的文档集合做出简要概述。

    easyAI
  • 浙江大学和海康威视提出:视频场景文本定位算法SVST(集成检测,跟踪和识别于一体)

    【导读】本文分享一篇浙江大学和海康威视最新联合提出的视频场景文本定位(Video Scene Text Spotting)方向的算法:SVST(spotting...

    Amusi
  • 德企开发出基于人工智能的新型文本分析技术

    新闻门户网站和社会媒体都含有丰富的信息资源,例如对股票市场趋势的预测信息。如今,很多服务提供商允许通过向其搜索引擎输入描述性关键字来搜索大量的文本集。然而关键词...

    人工智能快报
  • 简单的搜索引擎搭建

    CodeInHand

扫码关注云+社区

领取腾讯云代金券