teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2017/12/14 16:16

投稿

keicha_hrs
keicha_hrs

スコア6768

answer CHANGED
@@ -4,9 +4,11 @@
4
4
  TextView textView = findViewById(R.id.textView);
5
5
  SpannableStringBuilder sb = new SpannableStringBuilder(textView.getText());
6
6
  sb.replace(4, 5, "う");
7
- sb.replace(5, 6, "う");
7
+ sb.replace(5, 6, "う"); // この部分の装飾は維持される
8
8
  sb.replace(6, 7, "う");
9
9
  textView.setText(sb);
10
10
  ```
11
11
 
12
- replaceで装飾部分と非装飾部分を横断するような範囲指定をすると、setSpanで設定したフラグ(Spanned.SPAN_INCLUSIVE_INCLUSIVEのような)次第で、replaceした全てが装飾されるか、replaceした全ての装飾が解除されるか、いずれかになってしまうようですね。ですから、この場合は1文字ずつreplaceするしかない、という感じみたい。
12
+ replaceで装飾部分と非装飾部分を横断するような範囲指定をすると、setSpanで設定したフラグ(Spanned.SPAN_INCLUSIVE_INCLUSIVEのような)次第で、replaceした全てが装飾されるか、replaceした全ての装飾が解除されるか、いずれかになってしまうようですね。ですから、この場合は1文字ずつreplaceするしかない、という感じみたい。
13
+
14
+ もっと良い方法があるかもしれないけど、思いつきませぬ。