8

私は今2日間問題を解決しようとしていますが、成功していません。

問題は、BulletSpan をテキストに設定し、それを EditText に表示すると、別のテキストを入力し始めるまですべて正常に動作することです。テキストが画面の最後で折り返されると、インデントは機能しますが、カーソルは実際の位置から外れており、前の行の文字がカーソルの後に追加されます。この問題をよりよく説明するには、添付の画像を参照してください。

スパンエラー

また、これはテキストを入力したときにのみ発生すること、ソースにテキストを設定していて、テキストが長すぎて 1 行に収まらない場合にのみ発生することにも言及する価値があります。ラッピングは正常に機能し、余分な文字もカーソル位置も追加されません。間違っている。

また、 LeadingMarginSpan.Standart を試してみましたが、動作は同じでした。

コードでは、開始マークを設定しています:

private void handleListStart(SpannableStringBuilder text) {
    int len = text.length();
    text.setSpan(new ListItem(), len, len, Spannable.SPAN_MARK_MARK);
}

次に、スパンを設定します。

private void handleListEnd(SpannableStringBuilder text) {
    int len = text.length();
    Object obj = getLast(text, ListItem.class);
    int where = text.getSpanStart(obj);

    text.removeSpan(obj);

    if (where != len) {
        text.setSpan(new BulletSpan(listIndent * 15), where, len, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
    }
}

私はxmlファイルからデータを取得しています。

助けてくれてありがとう

編集: Android 4.1 と 4.4 でこれを試したところ、どちらも同じように動作したことを付け加えるのを忘れています

4

2 に答える 2