Зачеркнутый текст не сохраняется в базе данных SQLite

Я столкнулся с проблемой, что при использовании StrikethroughSpan зачеркнутый текст не сохраняется в базе данных SQLite моего приложения. Однако он отлично работает с другими диапазонами, особенно с StyleSpan и UnderlineSpan - жирный/курсив/подчеркнутый текст правильно сохраняется в БД и отображается CursorAdapter. Я использую HtmlCompat для этой цели. Но зачеркнутый текст показывается без форматирования, как обычный текст.

Мои исследования в Интернете по этому вопросу не дали никаких результатов. В чем причина такого поведения и есть ли способ решить проблему?

Мой код для сохранения составного текста в БД:

ContentValues values = new ContentValues();
        NoteCursorAdapter cursorAdapter = new NoteCursorAdapter(this, null);

        String newHtmlString = HtmlCompat.toHtml(noteText, TO_HTML_PARAGRAPH_LINES_CONSECUTIVE);

        values.put(NoteEntry.COLUMN_NOTE_TEXT, newHtmlString);

в деятельности:

@Override
public void bindView(View view, Context context, Cursor cursor) {
            ...
        String htmlFormString = cursor.getString(noteBitmapColumnIndex);
        Spanned spannedText = HtmlCompat.fromHtml(htmlFormString, FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE);
        noteBitmap.setText(spannedText);
}

в КурсорАдаптер:

@Override
public void onLoadFinished(...) {
    ...

    htmlString = cursor.getString(textColumnIndex);
    realText = HtmlCompat.fromHtml(htmlFormString, FROM_HTML_SEPARATOR_LINE_BREAK_BLOCKQUOTE);    
    mNoteText.setText(realText);

Строка html, помещенная в ContentValues ​​(newHtmlString), показывает соответствующие теги HTML:

I/System.out: <p dir="ltr"><b><b><strike>Word</strike></b></b></p>

но форматирование не отображается.


person prosp    schedule 07.12.2018    source источник
comment
Как вы храните данные? Как выглядит строка html, прочитанная из базы данных?   -  person laalto    schedule 07.12.2018
comment
Пожалуйста, смотрите мое обновление. Я сохраняю данные с помощью DBHelper/ContentProvider и конвертирую текст с помощью HtmlCompat.toHtml. Строка html, помещенная в ContentValues ​​(newHtmlString), показывает теги ‹strike›, ‹/strike›: I/System.out: ‹p dir=ltr›‹b›‹b›‹strike›Word‹/strike›‹ /б›‹/б›‹/р›   -  person prosp    schedule 07.12.2018


Ответы (1)


Html класс не слишком хорошо документирован с точки зрения поддерживаемых им тегов. Проверил исходный код на Android 5 и Android 9. Версия Android 9 поддерживает зачеркивание в обоих направлениях (ref), тогда как Android 5 только выводит его, но не читает в fromHtml() (ref). Не докопался когда именно меняли.

Вероятно, вы можете обойти это, предоставив пользовательский обработчик тегов для fromHtml. Вот пример: Android: как использовать Html.TagHandler?

person laalto    schedule 07.12.2018
comment
Я понимаю. Большое спасибо за вашу помощь! Я попробую так. - person prosp; 07.12.2018