1

尝试使用 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() 方法,但也许我遗漏了一些东西。

4

3 回答 3

1

来自 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 被空文本清除怎么办?

于 2014-01-07T23:11:39.517 回答
0
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 并使用带有 BufferType.SPANNABLE 的 setText 方法解决了原始问题。

然后出现了一个后续问题,textview 中出现了奇怪的线路制动。原来在这个过程中的某个地方添加了html-paragraph代码,手动删除它时下面的丑陋解决方案。当我意识到段落语句中的附加参数是由具有 API 18 的设备添加时,解决方案变得更加俗气,将我的测试设备与 API 8 进行了比较。

于 2014-01-09T04:00:10.743 回答
0

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

Spanned spannedText = new SpannableString(textView.getText());
String htmlString = Html.toHtml(spannedText);
于 2014-10-30T15:32:33.047 回答