簡體   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