【问题标题】:Html.fromHtml(); not working on some devicesHtml.fromHtml();不适用于某些设备
【发布时间】:2018-02-19 15:27:51
【问题描述】:

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

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

但在 Marshemellow 上它不起作用,我的意思是 &lt;strike&gt; 标签。

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

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

【问题讨论】:

  • @Ankita 加油,​​一个命令行的完整库?
  • "但是在 Marshemellow 上它不起作用,我的意思是 标签。" ——好吧,你错过了&gt;。我猜这是你问题中的一个错字。 &lt;strike&gt; 自 Android 早期就已得到支持。你需要做更多的实验才能确切地知道问题出在哪里。例如,Html.fromHtml() 是否返回一个带有StrikethroughSpan 的对象?如果没有,制造商修补了Html.fromHtml(),您需要以其他方式创建您的Spanned
  • @CommonsWare 我也使用了&lt;del&gt;&lt;s&gt;,但没有区别。我在下面的答案中使用了方法,但没有生效。顺便说一句,为什么它适用于牛轧糖? , Is there any way to get working on all devices ?
  • As I wrote,你需要做更多的实验来确定问题出在哪里。 fromHtml() 不是返回正确的Spanned 吗?

标签: android html android-textattributes


【解决方案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("&lt;strike&gt; " + myText + "&lt;/strike"));

编辑

不要忘记关闭你的三角括号:

fromHtml("&lt;strike&gt; " + myText + "&lt;/strike&gt;")); 而不是你的:fromHtml("&lt;strike&gt; " + myText + "&lt;/strike"));

【讨论】:

  • 发布myText 示例
【解决方案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);

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2016-10-11
      • 2013-12-08
      • 2016-02-06
      • 1970-01-01
      相关资源
      最近更新 更多