繁体   English   中英

具有Spanned强制转换的Html.toHtml(ClassCastException) <Android>

[英]Html.toHtml with Spanned cast (ClassCastException) <Android>

尝试使用HTML格式化我的输出(在TextView中)。 我需要从旧的输出中获取HTML格式的文本,并将新文本添加到其上方一行。

String previous = Html.toHtml((Spanned) chatOutput.getText());
chatOutput.setText(Html.fromHtml(message + "<br>" + previous));

这样可以编译,但在运行时通过toHtml()方法给出java.lang.ClassCastException:java.lang.String。 我看到几个人建议可以使用toHtml()方法,但也许我缺少一些东西。

从getText()的文档中

Return the text the TextView is displaying. If setText() was called with an argument of BufferType.SPANNABLE or BufferType.EDITABLE, you can cast the return value from this method to Spannable or Editable,

这样就可以进行转换了,但是我仍然会用instanceof检查它是否安全,如果用空文本清除了textview怎么办?

TextView chatOutput = (TextView) findViewById(R.id.textView4);
chatOutput.setText("", BufferType.SPANNABLE);

void updateChatOutput {
    String previous = Html.toHtml((Spannable) chatOutput.getText());
    if (!previous.equals("")) {
        if (previous.substring(0, 13).equals("<p dir=\"ltr\">"))
            previous = previous.substring(13, previous.length()-3); //remove <p dir="ltr"> and </p>
        else
            previous = previous.substring(3, previous.length()-3); //remove <p> and </p>
    }
    chatOutput.setText(Html.fromHtml(message.substring(2, message.length()) + "<br>" +  previous));
}

弄清楚了。 将强制转换更改为Spannable,并将setText方法与BufferType.SPANNABLE结合使用可解决原始问题。

然后发生了后续问题,在文本视图中出现了奇怪的行制动。 原来,在此过程中某处添加了html段代码,以下为手动删除时的丑陋解决方案。 当我意识到段落声明中的附加参数是由具有API 18的设备添加的,并将我的测试设备与API 8进行了比较时,该解决方案变得更加棘手。

同样的问题。 在转换为Spanned之前必须创建新的SpannableString。

Spanned spannedText = new SpannableString(textView.getText());
String htmlString = Html.toHtml(spannedText);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM