15

私が取り組んでいるプロジェクトのSpanned/Spannableクラスのドキュメントを読んでいます。MARKとを含むスパンの定義と使用法に困惑していますPOINT

MARKDoc では、a はキャラクターの位置に「取り付けられている」と定義されているようですが、aPOINTはキャラクターに「接着」されていると定義されています。したがって、MARKテキストが変更されても a は移動せず、テキストが変更POINTされたときに「接着」されていた文字と一緒に移動します。

これらの定義は、MARKが と同義でINCLUSIVEあり、POINTが と同義であることを示しているようですEXCLUSIVE

ただし、どちらも or と同義ではないため、これはSPAN_MARK_MARK当てはまりませSPAN_POINT_POINTん。実際、は と同じであり、は と同じです。SPAN_INCLUSIVE_INCLUSIVESPAN_EXCLUSIVE_EXCLUSIVESPAN_INCLUSIVE_INCLUSIVESPAN_MARK_POINTSPAN_POINT_MARKSPAN_EXCLUSIVE_EXCLUSIVE

私の質問は次のとおりです

  1. SPAN_POINT_MARKと同義なのはなぜSPAN_EXCLUSIVE_EXCLUSIVEですか?SPAN_MARK_POINTと同義なのはなぜSPAN_INCLUSIVE_INCLUSIVEですか?

  2. とがそれぞれSPAN_MARK_MARKSPAN_POINT_POINT同義ではないのはなぜですか?SPAN_INCLUSIVE_INCLUSIVESPAN_EXCLUSIVE_EXCLUSIVE

  3. この用法におけるMARKandの本当の定義は何ですか?POINT

4

2 に答える 2

6

それらは概念的な概念であり、出現順に考えます。

ドキュメントから:

MARK と POINT は、概念的には隣接する 2 つの文字の間に配置されます。マークは前に文字に「付けられ」ますが、ポイントは後に文字に貼り付けられます。挿入カーソルは、概念的には MARK と POINT の間に配置されます。その結果、 MARK と POINT の間に新しい文字を挿入すると、MARK は変更されませんが、POINTはシフトされ、挿入された文字の後に配置され、その後の同じ文字に引き続き接着されます。挿入がスパンの先頭または末尾のどちらで発生するかに応じて、スパンは新しい文字を含むように拡張されます(スパンが先頭で MARK を使用している場合、または末尾で POINT を使用している場合)。または除外されます。ここで before と after は文字列のオフセットを参照しており、テキストの視覚的表現とは無関係であることに注意してください。

あなたのポイント

これらの定義は、MARK が INCLUSIVE と同義であり、POINT が EXCLUSIVE と同義であることを示しているようです。

本当にそうではありません。基本的に、マークはスパンの開始マーカー、ポイントはエンドポイントと考えてください。これら 2 つのポイント間で発生すること (スタイル設定、スタイル設定されたテキストへのテキストの追加など) は、包括的および排他的に分類されるようになり、それらと直接相関するようになりました。

例を見てみましょう: 次のテキストにスタイルを設定したとします。

これはサンプルテキストです

太字のスパンで SPAN_EXCLUSIVE_EXCLUSIVE を使用し、スパンの中央にテキストを挿入すると、太字のままになります。

これは信じられないほど良い例のテキストです

しかし、太字スパンの最初または最後にテキストを挿入すると、挿入されたテキストは太字になりません。

これはサンプルテキストではありません

SPAN_INCLUSIVE_EXCLUSIVE を使用すると、最初にテキストを挿入するとスパンの一部として含まれ、次のようになります。

これはかなりのサンプルテキストですよね

これはすべて、ドキュメントの私の解釈にすぎません。SPAN_POINT_MARK が SPAN_EXCLUSIVE_EXCLUSIVE と同義である理由は、Google の誰かがコメントする必要があると思いますが、私の意見では、MARK_POINT の動きは包含を表し、POINT_MARK は除外を表します。SPAN_POINT_POINT と SPAN_MARK_MARK は長さ 0 の文字列を表すため、包含/除外に起因するものではありません。

:EDIT: SPAN_MARK_MARK と SPAN_POINT_POINT は長さ 0 の文字列です。つまり、文字列は 0 位置のマークで始まり、その後の追加は文字列に追加されますが、マークの位置は変更されません。または、文字列はポイント位置で始まり、その後の追加はstring はポイントを最後に移動します。これらのフラグは基本的にスパン可能な文字列の開始点を通知するため、長さ 0 の文字列を表します。次に、開始する文字列が mark_mark または point_point であったかどうかに応じて、包括的、排他的フラグを使用できます。また、SPAN_EXCLUSIVE_INCLUSIVE、長さが 0 の場合はマークのように動作し、長さが 0 の場合は SPAN_INCLUSIVE_EXCLUSIVE がポイントのように動作しますが、これは定義方法から明らかです。

于 2013-07-24T05:33:18.437 に答える