SPAN_POINT_MARK和SPAN_MARK_POINT的区别是什么?



我一直在为我正在做的一个项目阅读span/Spannable类的文档。我一直对包含MARKPOINT的跨度的定义和用法感到困惑。

一个MARK似乎在Doc中被定义为"附加"到一个角色的位置,而一个POINT被定义为"粘"到一个角色。因此,当文本被改变时,MARK不会移动,而当文本被改变时,POINT会随着它所"粘"的字符移动。

这些定义似乎表明MARKINCLUSIVE是同义的,POINTEXCLUSIVE是同义的。

然而,情况并非如此,因为SPAN_MARK_MARKSPAN_POINT_POINT都不是SPAN_INCLUSIVE_INCLUSIVESPAN_EXCLUSIVE_EXCLUSIVE的同义词。事实上,SPAN_INCLUSIVE_INCLUSIVESPAN_MARK_POINT是一样的,SPAN_POINT_MARKSPAN_EXCLUSIVE_EXCLUSIVE是一样的。

我的问题如下

  1. 为什么SPAN_POINT_MARKSPAN_EXCLUSIVE_EXCLUSIVE是同义词?为什么SPAN_MARK_POINTSPAN_INCLUSIVE_INCLUSIVE是同义词?

  2. 为什么SPAN_MARK_MARKSPAN_POINT_POINT不分别与SPAN_INCLUSIVE_INCLUSIVESPAN_EXCLUSIVE_EXCLUSIVE同义?

  3. 在这种用法中MARKPOINT的真正定义是什么?

我喜欢解释MARK vs POINT的方式是用方括号表示它们在文本范围中存在的任何偏移量。括号所指向的方向表示该标记或点"附加"到的字符。

对于POINT,您将使用左括号-它附加在它后面的字符上。对于MARK,你可以使用右括号——它附在它前面的字符上。

让我们看看每种类型的一些例子:

SPAN_MARK_MARK

插入在0长度跨度的偏移量处:标记保持固定。<>之前[前][前][前][前]After: Lorem []INSERTipsum dolor sit。

在非0长度的span开始插入:插入的文本包含在该span的范围内。<>之前[前][前][前][前][/b] INSERTipsum]

在非0长度的span的末尾插入:插入的文本将被排除在该span的范围之外。<>之前[前][前][前][前]After: Lorem [ipsum]INSERT dolor sit。

从最后两个例子可以看出,为什么SPAN_MARK_MARK标志与SPAN_INCLUSIVE_EXCLUSIVE标志是同义的。插入在span开头的文本包括在范围内,而插入在span末尾的文本不包括在范围内。

SPAN_POINT_POINT

插入在0长度跨度的偏移量处:点被向前推。<>之前以前:Lorem [[ipsum dolor sit]。After: Lorem INSERT[[ipsum dolor .]

在非0长度的span的开始插入:插入的文本将被排除在span的范围之外。<>之前以前:Lorem [ipsum[dolor sit]。After: Lorem INSERT[ipsum]

插入在非0长度的span的末尾:插入的文本包含在该span的范围内。<>之前以前:Lorem [ipsum[dolor sit]。After: Lorem [ipsumINSERT]

从最后两个例子中,您可以再次看到为什么SPAN_POINT_POINT标志与SPAN_EXCLUSIVE_INCLUSIVE标志同义。插入在span开头的文本将被排除在范围之外,而插入在span末尾的文本将被包括在内。

SPAN_MARK_POINT

插入在span的开头:插入的文本包含在范围内。<>之前以前:Lorem]ipsum[悲伤,悲伤]INSERTipsum[/b]

插入到span的末尾:插入的文本仍然包含在范围内。<>之前以前:Lorem]ipsum[悲伤,悲伤]After: Lorem]ipsumINSERT

因此它有同义词SPAN_INCLUSIVE_INCLUSIVE——插入的文本总是包含在span的范围内。

SPAN_POINT_MARK

插入在span的开头:插入的文本被排除在范围之外。<>之前以前:Lorem [ipsum] dolor sit。After: Lorem INSERT[ipsum]

插入到span的末尾:插入的文本仍然被排除在范围之外。<>之前以前:Lorem [ipsum] dolor sit。After: Lorem [ipsum]INSERT dolor sit。

因此它有同义词SPAN_EXCLUSIVE_EXCLUSIVE——插入的文本总是被排除在span的范围之外。

我认为文档通过拆分一些同义词的定义来使事情变得混乱。例如,在描述SPAN_MARK_MARK时,他们只根据0长度的跨度来定义它的用法。然后,在定义SPAN_INCLUSIVE_EXCLUSIVE(这是一个同义词)时,他们只根据非0长度的跨度来定义它的用法。我认为,如果他们事先声明它们是同义词,并且两个术语有一个共同的定义,那就清楚得多了。

它们是概念性的概念,按照它们出现的顺序来思考

From the docs:

MARK和POINT在概念上位于相邻的两个之间字符。MARK"附加"在前面的字符上,而A点后会粘到字符上。插入游标为概念上位于MARK和POINT之间。因此,在MARK和POINT之间插入一个新字符将离开MARK不变,而POINT将被移动,现在位于插入的字符,仍然粘到相同的字符后。取决于插入是发生在开始还是结束对于一个span,该span将因此被扩展以包含新的字符(当span在其开头使用MARK或POINT时),否则将被排除。注意,前后在这里引用字符串中的偏移量,它独立于视觉效果文本

的表示

你的观点

这些定义似乎表明MARK是INCLUSIVE的同义词这个点是EXCLUSIVE的同义词。

并非如此。基本上可以把标记作为跨度的起始标记,而作为端点。在这两点之间发生的事情(样式化,在样式化的文本上添加更多的文本等等)现在被归类为包容和排斥,因此与它们直接相关。

让我们看一个例子:假设我们有如下文本样式

这是一个示例文本

如果我们在黑体span上使用了SPAN_EXCLUSIVE_EXCLUSIVE,并且我们在span的中间插入了文本,它仍然是黑体:

这是一个非常好的例子 text

但是如果在黑体span的开头或结尾插入文本,则插入的文本不是黑体:

这不是一个例子文本

如果我们使用了SPAN_INCLUSIVE_EXCLUSIVE,那么在开头插入的文本将作为span的一部分被包括在内,我们将得到:

这是一个很好的例子文本,不是吗

现在所有这些只是我对文档的解释。为什么SPAN_POINT_MARK和SPAN_EXCLUSIVE_EXCLUSIVE是同义词,我想这是谷歌的某个人必须要评论的,但在我看来,MARK_POINT运动代表包容,而POINT_MARK代表排斥。SPAN_POINT_POINT和SPAN_MARK_MARK表示0长度字符串,因此不能归因于包含/排除。

:编辑:SPAN_MARK_MARK和SPAN_POINT_POINT都是0长度的字符串,即字符串从0位置的标记开始,然后任何后续的添加都附加到字符串上,但标记位置不会改变,或者字符串从点位置开始,任何后续的添加都将字符串的点移动到末尾。这些标志实际上表示起点是一个可伸缩的字符串,因此表示0长度的字符串。然后,可以根据字符串是mark_mark还是point_point开始使用包含或排除标志。还有SPAN_EXCLUSIVE_INCLUSIVE,当长度为0时,表现得像标记,当长度为0时,表现得像点,这从它们的定义方式中可以明显看出。这是我对docs

的解释

相关内容

  • 没有找到相关文章

最新更新