#android
Вопрос:
У меня есть такой html-код цены с сервера
<del><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">amp;#8377;</span>12,000.00</span></del> <ins><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">amp;#8377;</span>3,999.00</span></ins>
Я использую HTMLCompact для визуализации в textview
HtmlCompat.fromHtml(description, HtmlCompat.FROM_HTML_MODE_COMPACT)
Но текст скидки не зачеркнут. Тег Del полностью исключен.
Реализация кода в соответствии с запросом
<TextView
android:id="@ id/course_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fontFamily="@font/open_sans_semi_bold"
app:renderHtmlText="@{viewModel.product.priceHtml}"
android:textSize="18sp" />
//Binding Adapter
@BindingAdapter("renderHtmlText")
fun bindRenderHtmlText(view: TextView, description: String?) {
if (description != null) {
view.text = HtmlCompat.fromHtml(description, HtmlCompat.FROM_HTML_MODE_COMPACT)
} else {
view.text = ""
}
}
Комментарии:
1. На каком уровне API вы запускаете код?
2.
targetSdkVersion 30
и приложение, работающее на Android версии 7.1.23. Вы пробовали простое
<del>12,000.00</del>
? ИОУ, это ваша проблема<del>
или ваша проблема<del>
с двумя вложенными<span>
тегами?4. @CommonsWare обычно это нормально работает проблема с вложенным промежутком
5. Вам придется опубликовать больше кода. Там может быть дополнительное
toString()
или что-то еще, что удаляет форматирование.
Ответ №1:
Основываясь на логике handleEndTag
исходного кода платформы Android, внешний del
тег может игнорироваться внутренним span
тегом.
Предлагаемое решение-добавить встроенный стиль style="text-decoration: line-through;
для совместимости, как показано ниже.
<del>
<span class="woocommerce-Price-amount amount" style="text-decoration: line-through;">
<span class="woocommerce-Price-currencySymbol">amp;#8377;</span>12,000.00
</span>
</del>
<ins><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">amp;#8377;</span>3,999.00</span>
Или измените структуру своей html-страницы, чтобы сделать del
тег внутри span
тега.
<span class="woocommerce-Price-amount amount">
<span class="woocommerce-Price-currencySymbol"><del>amp;#8377;</del></span><del>12,000.00</del>
</span>
<ins><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">amp;#8377;</span>3,999.00</span>
</ins>
Комментарии:
1. На самом деле этот api создан woocommrce, я не могу изменить его со стороны сервера.
2. Можете ли вы изменить
description
текст при рендеринге?3.
description.replaceFirst("<span", "<span style="text-decoration: line-through;"")
4. Мне это кажется правильным и похоже на ошибку. Я добавлю, что ни «<del><del></del>», ни «</del> » не поддерживаются до API 24. (Пожалуйста, поправьте меня, если я ошибаюсь в этом.) Для поддержки API до API 24 более полным решением было бы выполнить описанное выше для API 24 и реализовать Html. TagHandler для API ниже 24.
5. С настроенными
Html.TagHandler
звуками разумное решение для совместимости.