3

空の箇条書きの段落を作成したかったのですが、機能しませんでした。これは私のコードです:

EditText contentET = (EditText) findViewById(R.id.content);
contentET.setText("abc\n123\n");
Spannable s = contentET.getText();
s.setSpan(new BulletSpan(), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(), 4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(), 7, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
contentET.setText(s);

上記のコードを実行したとき、この行は機能しないようでした

s.setSpan(new BulletSpan(), 7, 8, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

代わりに、「123」の後に予期しない空白が表示されました。BulletSpanで空の箇条書きの段落を作成する方法を知っている人はいますか?ありがとう!

4

1 に答える 1

6

私はあなたのコードを実行し、あなたが何を意味するのかを確認しました。「123」の後の奇妙な空白は、実際にはスペース文字として扱われないため、グラフィックの不具合のように見えます。つまり、バックスペースを押すと、数字の「3」が削除されることがわかります。

そうは言っても、幸いなことに、問題を簡単に修正できます。スパンを適用するインデックスを変更する必要があります。独自のコードの行を以下の行と交換すると、奇妙な空白がなくなり、3番目の空の箇条書きが表示されます。これにより、箇条書きとそれに続く実際のテキストの間にいくらかの間隔ができます。

s.setSpan(new BulletSpan(), 0, 0, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
s.setSpan(new BulletSpan(), 4, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
s.setSpan(new BulletSpan(), 8, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

個人的には、これをもう少し柔軟にして、文字列全体を別々の部分に分割し、それらを繰り返す傾向があります。次に、を使用して、SpannableStringBuilderテキストを追加し、すべての連結でスパンを設定できます。contentET.getText()実行時に実際にSpannableStringBuilderを返すため、水中ではこれはすでに発生しています。:)

また、私が使用したことに注意Spannable.SPAN_EXCLUSIVE_EXCLUSIVEしてください。そうしないと、テキストをバックスペースで削除し始めると、突然余分な箇条書きが表示されます。

結果は次のようになります。

空のBulletSpanを作成する

于 2011-11-26T21:14:02.030 に答える