2

我在 android nougat 上使用下面的代码,它正在工作:-

Html.fromHtml("<strike> " + myText + "</strike"));

但是在 Marshemellow 上它不起作用,我的意思是<strike>标签。

有什么办法可以在所有设备上工作吗?

myText是recyleView中接收到的动态文本:

 public void onBindViewHolder(final DealsAdapter.MyViewHolder holder, final int position) {
    final DataDeals feedItem = feedItemList.get(position);

用法 :-

holder.oldPrice.setText(fromHtml("<strike>" + feedItem.getOldPrice() + "</strike>"));
4

3 回答 3

2

我遇到了同样的问题,StrikethroughSpan 在 RecyclerView 项目布局内的 TextView 上不起作用(对于某些设备)。它在我的 Pixel OS 8.1 上运行良好,但在 Nexus 6 OS 7.1.1 上无法运行。

就我而言,我意识到我的布局中的一些限制导致了这个问题。我稍微改变了实现布局的方式,StrikethroughSpan 又开始工作了。注意具有 wrap_content 宽度和高度并位于相对布局中的 TextView。可能会影响 TextView 大小的事情可能会导致此问题。不幸的是,我没有找到问题的根本原因,但我希望这可以帮助其他有类似问题的人。

作为说明,这两种解决方案都对我有用:

Html.fromHtml("<strike> " + myText + "</strike"));

或者

SpannableStringBuilder spanText = new SpannableStringBuilder("my_awesome_text");
spanText.setSpan(new StrikethroughSpan(), 0, textToBeDisplayed.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
myTextView.setText(spanText);
于 2018-01-19T16:00:05.483 回答
2

此方法已弃用。

我应该使用这段代码:

@SuppressWarnings("deprecation")
public static Spanned fromHtml(String html){
    Spanned result;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
       result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
    } else {
       result = Html.fromHtml(html);
    }
    return result;
}

用法:

fromHtml("<strike> " + myText + "</strike"));

编辑

不要忘记关闭三角括号:

fromHtml("<strike> " + myText + "</strike>")); 而不是你的:fromHtml("<strike> " + myText + "</strike"));

于 2017-09-11T11:40:24.550 回答
0

除了 Vyacheslav 提到的内容之外,请检查您的 TextView 上是否设置了字体系列。我花了将近 4 个小时调试这个问题并从 TextView 中删除 FontFamily 解决了我的问题。

于 2020-08-27T16:17:17.577 回答