Зачеркнутый текст не сохраняется в базе данных 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);
}
в CursorAdapter:
@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>
но форматирование не отображается.
1 ответ
Html
Класс не слишком хорошо документирован с точки зрения тегов, которые он поддерживает. Проверено его исходный код с Android 5 и Android 9. Версия Android 9 поддерживает зачистку в обе стороны ( ссылка), в то время как Android 5 только выводит ее, но не читает в fromHtml()
( ссылка) Не копался, когда именно это было изменено.
Вероятно, вы можете обойти это, предоставив собственный обработчик тега fromHtml
, Вот пример: Android: Как использовать Html.TagHandler?