spannableオブジェクトを3つマージします。このコードは正常に動作します:spannableオブジェクトをマージする際のエラー
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オブジェクトをマージするとき、結果が間違っています。 特定の要素のタイプが正しいことを確認しました。
beginOfModifiedSpannableは太字で、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つの部分があります:私は、最初のマージが右であることに気づいた ヘル見よ、WOR LD
を:それはヘル loのように見えます
finishSpan = (Spanned) TextUtils.concat(beginningOfModifiedSpannable,selectionSpannable);
、WOR
しかし、 2番目は間違っている
finishSpan = (Spanned) TextUtils.concat(finishSpan,endOfModifiedSpannable);
finishSpan = (Spanned) TextUtils.concat(finishSpan,selectionSpannable,endOfModifiedSpannable);
そして間違った文字列の結果は次のとおりです:または、このマージは間違っている、
ヘル LO:RLD
woは、 こんにちはしかし、真の結果は次のようでなければなりませんワールド
ナンセンス!
を!ありがとうございました! –
CharacterStyle c2 = CharacterStyle.wrap(c)もジョブを実行します。 –
これはバグのように見える、ありがとう、あなたは私の日を救った –