我一直在阅读 Spanned/Spannable 的文档我正在从事的项目的类(class)。我一直对包含 MARK
和 POINT
的 span 的定义和用法感到困惑。
MARK
似乎在 Doc 中被定义为“附加”到角色的位置,而 POINT
被定义为“粘附”到角色。因此,当文本更改时,MARK
不会移动,而当文本更改时,POINT
将随着它“粘附”到的字符移动。
这些定义似乎表明 MARK
与 INCLUSIVE
同义,而 POINT
与 EXCLUSIVE
同义。
但是,情况并非如此,因为 SPAN_MARK_MARK
和 SPAN_POINT_POINT
都不是 SPAN_INCLUSIVE_INCLUSIVE
或 SPAN_EXCLUSIVE_EXCLUSIVE
的同义词.事实上,SPAN_INCLUSIVE_INCLUSIVE
与 SPAN_MARK_POINT
相同,SPAN_POINT_MARK
与 SPAN_EXCLUSIVE_EXCLUSIVE
相同。
我的问题如下
为什么
SPAN_POINT_MARK
与SPAN_EXCLUSIVE_EXCLUSIVE
同义?为什么SPAN_MARK_POINT
与SPAN_INCLUSIVE_INCLUSIVE
同义?为什么
SPAN_MARK_MARK
和SPAN_POINT_POINT
不分别与SPAN_INCLUSIVE_INCLUSIVE
和SPAN_EXCLUSIVE_EXCLUSIVE
同义?MARK
和POINT
在这个用法中的真正定义是什么?
最佳答案
我想解释 MARK 与 POINT 的方式是将它们表示为方括号,无论它们在文本范围内存在什么偏移量。括号指向的方向表示标记或点“附加”到的字符。
因此对于 POINT,您可以使用左括号 - 它附加到它后面的字符。对于 MARK,您可以使用右括号 - 它附加到它前面的字符。
让我们看一下每种类型的一些示例:
SPAN_MARK_MARK
在 0 长度 Spanned 的偏移处插入:标记保持固定。
Before: Lorem ]]ipsum dolor sit. After: Lorem ]]INSERTipsum dolor sit.
Inserting at the start of a non-0-length span:插入的文本包含在 Spanned 范围内。
Before: Lorem ]ipsum] dolor sit. After: Lorem ]INSERTipsum] dolor sit.
在非 0 长度 Spanned 的末尾插入:插入的文本被排除在 Spanned 范围之外。
Before: Lorem ]ipsum] dolor sit. After: Lorem ]ipsum]INSERT dolor sit.
您可以从最后两个示例中看出,为什么 SPAN_MARK_MARK
标志与 SPAN_INCLUSIVE_EXCLUSIVE
标志同义。在 Spanned 开头插入的文本包含在范围内,而在末尾插入的文本被排除在外。
SPAN_POINT_POINT
在 0 长度 Spanned 的偏移处插入:点被向前推。
Before: Lorem [[ipsum dolor sit. After: Lorem INSERT[[ipsum dolor sit.
Inserting at the start of a non-0-length span:插入的文本被排除在 Spanned 范围之外。
Before: Lorem [ipsum[ dolor sit. After: Lorem INSERT[ipsum[ dolor sit.
Inserting at the end of a non-0-length span:插入的文本包含在 Spanned 范围内。
Before: Lorem [ipsum[ dolor sit. After: Lorem [ipsumINSERT[ dolor sit.
您可以从最后两个示例中再次看出为什么 SPAN_POINT_POINT
标志与 SPAN_EXCLUSIVE_INCLUSIVE
标志同义。在范围开头插入的文本被排除在范围之外,而在末尾插入的文本被包括在内。
SPAN_MARK_POINT
Inserting at the start of the span:插入的文本包含在范围内。
Before: Lorem ]ipsum[ dolor sit. After: Lorem ]INSERTipsum[ dolor sit.
在范围末尾插入:插入的文本仍包含在范围内。
Before: Lorem ]ipsum[ dolor sit. After: Lorem ]ipsumINSERT[ dolor sit.
因此它具有同义词 SPAN_INCLUSIVE_INCLUSIVE
- 插入的文本始终包含在 Spanned 范围内。
SPAN_POINT_MARK
Inserting at the start of the span:插入的文本被排除在范围之外。
Before: Lorem [ipsum] dolor sit. After: Lorem INSERT[ipsum] dolor sit.
在范围的末尾插入:插入的文本仍然不在范围内。
Before: Lorem [ipsum] dolor sit. After: Lorem [ipsum]INSERT dolor sit.
因此它具有同义词 SPAN_EXCLUSIVE_EXCLUSIVE
- 插入的文本始终被排除在 Spanned 范围之外。
我认为文档通过拆分一些同义词的定义来混淆事物。例如,在描述 SPAN_MARK_MARK
时,他们仅根据 0 长度 Spanned 定义其用法。然后在定义 SPAN_INCLUSIVE_EXCLUSIVE
(这是一个同义词)时,他们只根据非 0 长度范围定义其用法。我认为,如果他们预先声明它们是同义词,并且两个术语共享一个定义,那就更清楚了。
关于android - SPAN_POINT_MARK 和 SPAN_MARK_POINT 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16531555/