如何解决Flutter 中的 TextAffinity 是什么? 下游上游下游上游
Flutter 中的 TextAffinity 枚举具有以下 documentation description:
一种在 TextPosition 的偏移量可以匹配两个时消除歧义的方法 呈现的字符串中的不同位置。
例如,在渲染文本换行的偏移量处,有两个 偏移量可以表示的视觉位置:在 换行符(在第一行的末尾)和换行符之后的一个 (在第二行的开头)。文本亲和力消除歧义 在这两种情况之间。
这仅影响由换行引起的换行符,而不影响显式换行符 人物。对于换行符,位置完全由 单独的偏移量,没有歧义。
TextAffinity 也会影响之间的接口处的双向文本 LTR 和 RTL 文本。考虑以下字符串,其中小写 字母将显示为 LTR 和大写字母 RTL: “你好你好”。渲染时,字符串将在视觉上显示为 “你好OLLEH”。没有 5 的偏移量将是不明确的 对应的 TextAffinity。查看代码中的字符串,偏移量 表示紧接在“o”之后和紧接在“H”之前的位置。 渲染时,此偏移量可能位于字符串的中间 “o”的右侧或字符串的末尾 “H”。
这种说法是有道理的,但还是有点令人困惑。例如,“helloHELLO”实际上并不是双向文本。偏移 5 是如何模棱两可的?你有一个直观的例子吗?
我将在下面添加我的答案。
解决方法
TextAffinity 消除了软换行和双向文本边界的文本位置歧义。亲和力可以是上游或下游。下游是默认设置。
软包位置
给定最后一个字符软换行到下一行的字符串0123456789
,您可以如下选择光标位置。两个位置都在偏移 9
:
下游
上游
双向文本边界
给定字符串Helloשלום
,其中Hello
是LRT 文本,שלום
是RTL 文本,您可以如下选择它们之间边界处的光标位置。两个位置都在偏移 5
:
下游
上游
继续
我更详细地写了这个here。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。