Android HtmlCompat.fromHtml <del> 标签不起作用

Abh*_*ngh 5 android

我有来自服务器的这种价格 html

<del><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">&#8377;</span>12,000.00</span></del> <ins><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">&#8377;</span>3,999.00</span></ins>
Run Code Online (Sandbox Code Playgroud)

我正在使用 HTMLCompact 在 textview 中呈现它

HtmlCompat.fromHtml(description, HtmlCompat.FROM_HTML_MODE_COMPACT)
Run Code Online (Sandbox Code Playgroud)

但折扣文字不是 StrikeThrough。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 = ""
    }
}
Run Code Online (Sandbox Code Playgroud)

ali*_*dro 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">&#8377;</span>12,000.00
    </span>
</del>
<ins><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">&#8377;</span>3,999.00</span>
Run Code Online (Sandbox Code Playgroud)

del或者调整您的 html 页面结构以在标签内创建标签span

<span class="woocommerce-Price-amount amount">
        <span class="woocommerce-Price-currencySymbol"><del>&#8377;</del></span><del>12,000.00</del>
</span>
<ins><span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">&#8377;</span>3,999.00</span>
</ins>
Run Code Online (Sandbox Code Playgroud)