10

この質問と同じタイトルを使用します。私の質問はその質問と非常に似ていると思うので、受け入れられた回答を非常に注意深く読んでテストしましたが、受け入れられた回答はうまくいきません。私の質問を説明しましょう:

私のコードは次のようになります:

 EditText myEdit = (EditText) this.findViewById(R.id.myedit);
 myEdit.setText("a\nb\n");
 Spannable s = myEdit.getText();
 s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
 s.setSpan(new BulletSpan(30), 2, 3,  Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
 s.setSpan(new BulletSpan(30), 4, 4,  Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
 myEdit.setText(s);

私が見たいのは:

  • a
  • b
  • 【ここで第3弾を見たいが出てこない】

Spannable.SPAN_INCLUSIVE_INCLUSIVESpannable.SPAN_INCLUSIVE_EXCLUSIVESpannable.SPAN_EXCLUSIVE_INCLUSIVE、を試しSpannable.SPAN_EXCLUSIVE_EXCLUSIVEましたが、これらのフラグはどれも機能しません。

そして、これらのコードを使用すると:

EditText myEdit = (EditText) this.findViewById(R.id.myedit);
myEdit.setText("a\nb\nc");
Spannable s = myEdit.getText();
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 2, 3,  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 4, 5,  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
myEdit.setText(s);

次に、期待される結果が得られます。

  • a
  • b
  • c

ユーザーが箇条書きアイコンをクリックすると、空の箇条書きを表示する必要がありますが、新しい空の BulletSpan (ドットのみで、ただし、スパンの開始と終了に文字がない場合、ドットは表示されません。

4

3 に答える 3

13

これは醜い解決策ですが、これ以上の解決策は見つかりませんでした。最後に空の文字 (ゼロ幅のスペースなど) を追加してみてください。これはあなたが望む結果を生み出しています(少なくとも視覚的に):

public void setBulletText(EditText myEdit, String text) {
        String[] lines = TextUtils.split(text, "\n");
        SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
        String line = null;
        for (int index = 0; index < lines.length; ++index) {
            line = lines[index];
            int length = spannableStringBuilder.length();
            spannableStringBuilder.append(line);
            if (index != lines.length - 1) {
                spannableStringBuilder.append("\n");
            } else if (TextUtils.isEmpty(line)) {
                spannableStringBuilder.append("\u200B");
            }
            spannableStringBuilder.setSpan(new BulletSpan(30), length, length + 1,
                Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        }
        myEdit.setText(spannableStringBuilder);
    }

結果は次のとおりです。 ここに画像の説明を入力

理想的には、EditTextこの文字を内部的に追加するカスタム クラスを作成しますが、テキストが他のオブジェクトに送信されるときに削除します。

于 2015-04-07T12:32:36.507 に答える
2

これでいいですか?

EditText myEdit = (EditText) this.findViewById(R.id.myedit);
myEdit.setText("a\nb\n\n");
Spannable s = myEdit.getText();
s.setSpan(new BulletSpan(30), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 2, 3, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
s.setSpan(new BulletSpan(30), 4, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
myEdit.setText(s);
myEdit.setSelection(s.length()-1);

結果は

ここに画像の説明を入力

于 2015-04-09T14:16:37.080 に答える