android 番号付きリスト BulletSpan で空の箇条書き段落を作成する方法



google ドキュメント 見出し 番号 (1)

私は空の箇条書きの段落を作成したかったが、うまくいかなかった。 これは私のコードです:

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で空の箇条書き段落を作成する方法は誰でも知っていますか? ありがとう!


Answer #1

私はあなたのコードを実行し、あなたが意味することを参照してください。 "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を返すcontentET.getText() 、これはすでに起こっています。 :)

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

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





spannable