有人可以用例子清楚地解釋每個span flags類似SPAN_EXCLUSIVE_EXCLUSIVE
和SPAN_MARK_MARK
的意思和什麼時候使用什麼標誌?解釋跨度標誌的含義,如SPAN_EXCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
型
跨度不擴大到包括在任的起點或終點插入的文本 :
當它說我不明白的官方文檔。
「擴展到包含」是指插入跨度後所做的編輯嗎?
這是否意味着這些標誌不會影響具有不可變文本的Spannables?
有人可以用例子清楚地解釋每個span flags類似SPAN_EXCLUSIVE_EXCLUSIVE
和SPAN_MARK_MARK
的意思和什麼時候使用什麼標誌?解釋跨度標誌的含義,如SPAN_EXCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
型
跨度不擴大到包括在任的起點或終點插入的文本 :
當它說我不明白的官方文檔。
「擴展到包含」是指插入跨度後所做的編輯嗎?
這是否意味着這些標誌不會影響具有不可變文本的Spannables?
「擴展到包含」是指插入跨度後所做的編輯嗎?
是。例如,我們假設我們有以下幾種:
quick fox躍升。
如果我們在粗體跨度使用SPAN_EXCLUSIVE_EXCLUSIVE
,而我們在跨中插入文本,它仍然是黑體字:
的敏捷的棕色狐狸跳下。
但是,如果我們在起始處插入文本或粗體跨度結束時,插入的文本不是粗體字:
真正快速狐狸跳下。
但是,如果我們使用SPAN_INCLUSIVE_EXCLUSIVE
,然後插入開頭的文字將被納入跨度的一部分,我們將有:
的真快狐狸跳下。
這是否意味着這些標誌不會影響具有不可變文本的Spannables?
我會說他們對不可變文本的使用有限。大多數情況下,這些將與SpannableStringBuilder
或使用其中一個的東西(例如,EditText
)一起使用。
當我第一次看到INCLUSIVE
和EXCLUSIVE
部分Spannable
標誌,我以爲他們只是告訴跨度是否不包括段的起始和結束索引位置。這不是真的。讓我用下面的例子來說明。
String myString = "";
int start = 1;
int end = 3;
int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
SpannableString spannableString = new SpannableString(myString);
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, start, end, spanFlag);
textView.setText(spannableString);
下面是結果:
SPAN_INCLUSIVE_INCLUSIVE
SPAN_INCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_INCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
他們都是一樣的!標誌不影響跨度。 範圍始終在其開始索引處包含字符,並排除末尾索引處的字符。
的INCLUSIVE
和EXCLUSIVE
部分Spannable標誌實際上告訴跨度是否應該包括被在開始或結束位置插入文本。
這裏是一個修改的例子來說明這一點。
String myString = "";
int start = 1;
int end = 3;
int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
// set the span
SpannableStringBuilder spannableString = new SpannableStringBuilder(myString);
ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
spannableString.setSpan(foregroundSpan, start, end, spanFlag);
// insert the text after the span has already been set
// (inserting at start index second so that end index doesn't get messed up)
spannableString.insert(end, "x");
spannableString.insert(start, "x");
textView.setText(spannableString);
下面是在端部插入x
後的結果,並開始索引:
SPAN_INCLUSIVE_INCLUSIVE
SPAN_INCLUSIVE_EXCLUSIVE
SPAN_EXCLUSIVE_INCLUSIVE
SPAN_EXCLUSIVE_EXCLUSIVE
SpannableStringBuilder
,因爲SpannableString
中的文本是不可變的,因此您無法在其中插入文本。因此,對於SpannableString
這些標誌通常沒有意義。但是,可以想象將SpannableString
的跨度複製到SpannableStringBuilder
或Editable
的情況,並且從那裏標誌將具有含義。SpannableString
,SpannableStringBuilder
,Editable
等之間的差異。
,很好的答案。你能解釋其他跨越國旗嗎?請參閱http://stackoverflow.com/q/16392417/596555 – boiledwater 2013-05-06 07:29:45