Html.fromHtml();没有在某些设备上工作

时间:2017-09-11 11:39:01

标签: android html android-textattributes

我在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>"));

3 个答案:

答案 0 :(得分:2)

我遇到的问题是StrikethroughSpan在RecyclerView项目布局内的TextView上没有工作(对于某些设备)。它在我的Pixel OS 8.1上运行良好,但在Nexus 6 OS 7.1.1上无效。

在我的情况下,我意识到布局中的一些约束导致了这个问题。我改变了我实现布局的方式,并且StrikethroughSpan再次开始工作。注意具有wrap_content宽度和高度的TextViews,并将其定位在Relative布局中。可能影响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);

答案 1 :(得分:1)

此方法已弃用。

我应该使用这段代码:

@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"));

答案 2 :(得分:0)

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