Flutter 中的 TextAffinity 是什么? 下游上游下游上游

问题描述

Flutter 中的 TextAffinity 枚举具有以下 documentation description

一种在 TextPosition 的偏移量可以匹配两个时消除歧义的方法 呈现的字符串中的不同位置。

例如,在渲染文本换行的偏移量处,有两个 偏移量可以表示的视觉位置:在 换行符(在第一行的末尾)和换行符之后的一个 (在第二行的开头)。文本亲和力消除歧义 在这两种情况之间。

这仅影响由换行引起的换行符,而不影响显式换行符 人物。对于换行符,位置完全由 单独的偏移量,没有歧义。

TextAffinity 也会影响之间的接口处的双向文本 LTR 和 RTL 文本。考虑以下字符串,其中小写 字母将显示为 LTR 和大写字母 RTL: “你好你好”。渲染时,字符串将在视觉上显示为 “你好OLLEH”。没有 5 的偏移量将是不明确的 对应的 TextAffinity。查看代码中的字符串,偏移量 表示紧接在“o”之后和紧接在“H”之前的位置。 渲染时,此偏移量可能位于字符串的中间 “o”的右侧或字符串的末尾 “H”。

这种说法是有道理的,但还是有点令人困惑。例如,“helloHELLO”实际上并不是双向文本。偏移 5 是如何模棱两可的?你有一个直观的例子吗?

我将在下面添加我的答案。

解决方法

TextAffinity 消除了软换行和双向文本边界的文本位置歧义。亲和力可以是上游或下游。下游是默认设置。

软包位置

给定最后一个字符软换行到下一行的字符串0123456789,您可以如下选择光标位置。两个位置都在偏移 9:

下游

enter image description here

上游

enter image description here

双向文本边界

给定字符串Helloשלום,其中Hello 是LRT 文本,שלום 是RTL 文本,您可以如下选择它们之间边界处的光标位置。两个位置都在偏移 5:

下游

enter image description here

上游

enter image description here

继续

我更详细地写了这个here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...