我想合併3個可跨越對象。此代碼正常工作:合併可跨越對象時出錯
Spannable s1 = new SpannableStringBuilder("bold");
s1.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, s1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Spannable s2 = new SpannableStringBuilder("not");
Spannable s3 = new SpannableStringBuilder("BOLD");
s3.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, s3.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
finishSpan = (Spanned) TextUtils.concat(s1,s2);
finishSpan = (Spanned) TextUtils.concat(finishSpan,s3);
////////////////// ////////////////
或finishSpan = (Spanned) TextUtils.concat(s1,s2,s3);
我有相同的代碼,但是當我合併3的對象,結果是錯的。 我檢查過某些元素的類型是否爲真。
beginningOfModifiedSpannable是粗體,selectionSpannable是正常的,endOfModifiedSpannable是粗體 但是它們的合併是錯誤的。只有結果字符串的最後一部分是粗體。爲什麼會發生?我有上面相同的代碼,它運作良好!
Spannable str = contentText.getText();
Spannable selectionSpannable = new SpannableStringBuilder(str, selectionStart, selectionEnd);
StyleSpan[] ss = selectionSpannable.getSpans(0, selectionSpannable.length(), StyleSpan.class);
boolean exists = false;
for (int i = 0; i < ss.length; i++) {
if (ss[i].getStyle() == android.graphics.Typeface.BOLD){
selectionSpannable.removeSpan(ss[i]);
exists = true;
}
}
if (!exists){
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), selectionStart, selectionEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
else {
Spannable endOfModifiedSpannable = new SpannableStringBuilder(str, selectionEnd, contentText.getText().length());
Spannable beginningOfModifiedSpannable = new SpannableStringBuilder(str, 0, selectionStart);
Spanned finishSpan = null;
if(beginningOfModifiedSpannable.length() > 0) {
if(endOfModifiedSpannable.length() > 0) {
finishSpan = (Spanned) TextUtils.concat(beginningOfModifiedSpannable,selectionSpannable);
finishSpan = (Spanned) TextUtils.concat(finishSpan,endOfModifiedSpannable);
}
else {
finishSpan = (Spanned) TextUtils.concat(beginningOfModifiedSpannable,selectionSpannable);
}
}
else {
if(endOfModifiedSpannable.length() > 0) {
finishSpan = (Spanned) TextUtils.concat(selectionSpannable,endOfModifiedSpannable);
}
else {
finishSpan = selectionSpannable;
}
}
contentText.setText(finishSpan);
我再說一遍,我已經檢查了3個部分是真實的。例如。我有3個部分: 赫爾 LO,WOR LD
我已經注意到了,第一合併是正確的:
finishSpan = (Spanned) TextUtils.concat(beginningOfModifiedSpannable,selectionSpannable);
它看起來像赫爾 LO,WOR
但第二個是錯的
finishSpan = (Spanned) TextUtils.concat(finishSpan,endOfModifiedSpannable);
或者這個合併是錯誤的:
finishSpan = (Spanned) TextUtils.concat(finishSpan,selectionSpannable,endOfModifiedSpannable);
與錯串的結果是: 你好,WO RLD
但真正的結果必然是這樣的:
赫爾 LO, 世界
廢話!
你是一個救星!謝謝! – 2013-09-11 16:00:31