在android textView

时间:2018-03-26 13:07:39

标签: android html-table html-escape-characters

我尝试了多种方法在android中渲染html。但它们都不符合我的要求。

作为对服务的回应,我在字符串中得到了html消息。

<table id='tblUpdateHistory' cellpadding='0' cellspacing='0'><tr align='left' valign='top'><td align='left' colspan='3' valign='top'><b>Case Update History<b></td></tr><tr align='left' valign='top'><td class='istColumn' align='left'><b> </b></td><td class='secondColumn' align='left' valign='top'><b>Old Value</b></td><td class='thirdColumn' align='left' valign='top'><b>Updated Value</b></td></tr><tr align='left'><td class='istColumn' align='left' valign='top'>Phone</td><td class='secondColumn' align='left' valign='top'>2034947144</td><td class='thirdColumn' align='left' valign='top'>203-494-7144</td></tr></table>",
  

我正在使用给定的方法在textView中呈现html。

public static void setHtml(TextView textView, String bodyData) {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            textView.setText(Html.fromHtml(bodyData, Html.FROM_HTML_MODE_LEGACY));
        } else {
            textView.setText(Html.fromHtml(bodyData));
        }
    }

我还尝试了三种方法来处理消息中的所有EscapeCharacter并正确替换它们

public String handleEscapeCharacter( String str ) {
        String[] escapeCharacters = { ">", "<", "&", """, "'" ," "};
        String[] onReadableCharacter = {">", "<", "&", "\"\"", "'" , "\\u00A0"};
        for (int i = 0; i < escapeCharacters.length; i++) {
            str = str.replace(escapeCharacters[i], onReadableCharacter[i]);
        } return str;
    }

然后我尝试了以下方式

public String convertToHtml(String htmlString) {

    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append("<![CDATA[");
    stringBuilder.append(htmlString);
    stringBuilder.append("]]>");
    return stringBuilder.toString();
}

第三,我尝试替换

setHtml(tvDetailText, descriptionTemp.replaceAll("(\n|\n\r|\r)", "<br />"));

但是当我打开Notepad ++并替换所有转义字符并通过替换某些字符来格式化我的消息。然后我尝试手动它工作,但只缺少一个选项卡。我在哪里做错了。格式化的html写在下面。

<table 
        id='tblUpdateHistory' 
        cellpadding='0' 
        cellspacing='0' >

            <tr align='left' 
                valign='top' >
                <td align='left' colspan='3' valign='top'><b>Case Update History<b> </td>
            </tr>

            <tr align='left' 
                valign='top' >
                <td class='istColumn' align='left'><b>&amp;nbsp;</b></td>
                <td class='secondColumn' align='left' valign='top'><b>Old Value</b></td>
                <td class='thirdColumn' align='left' valign='top'><b>Updated Value</b></td>
            </tr>

            <tr align='left'>
                <td class='istColumn' align='left' valign='top'>Phone</td>
                <td class='secondColumn' align='left' valign='top'>2034947144</td>
                <td class='thirdColumn' align='left' valign='top'>203-494-7144</td>
            </tr>
    </table>

我已经解析了这个json响应。

{
        "CaseNote": [{
                "ID": 575772,
                "CaseID": 218320,
                "Date": "6/15/2014 3:10:49 PM",
                "Message": "Refunded: Order was never imported/charged due to web issue.  This customer did not want to pickup a different arrangement.",
                "Status": 6,
                "ReOpened": "False",
                "UserName": "",
                "Source": "EAConnect",
                "OriginalRequest": "False"
            }, {
                "ID": 575732,
                "CaseID": 218320,
                "Date": "6/15/2014 3:04:12 PM",
                "Message": "&lt;table id='tblUpdateHistory' cellpadding='0' cellspacing='0'&gt;&lt;tr align='left' valign='top'&gt;&lt;td align='left' colspan='3' valign='top'&gt;&lt;b&gt;Case Update History&lt;b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr align='left' valign='top'&gt;&lt;td class='istColumn' align='left'&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td class='secondColumn' align='left' valign='top'&gt;&lt;b&gt;Old Value&lt;/b&gt;&lt;/td&gt;&lt;td class='thirdColumn' align='left' valign='top'&gt;&lt;b&gt;Updated Value&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr align='left'&gt;&lt;td class='istColumn' align='left' valign='top'&gt;Phone&lt;/td&gt;&lt;td class='secondColumn' align='left' valign='top'&gt;2034947144&lt;/td&gt;&lt;td class='thirdColumn' align='left' valign='top'&gt;203-494-7144&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;",
                "Status": 2,
                "ReOpened": "False",
                "UserName": "Jill Bailey",
                "Source": "CallCenter",
                "OriginalRequest": "False"
            }
        ]
        }

CaseNotes 中的第二个消息字段,在IOS结束时,它正常工作。

  

如何将此邮件转换为 HTML格式 ??

编辑1

我的HTML response编码不正确我在codepen上测试了它。并尝试使用给定的两种方法对其进行编码,但都是徒劳的..

String firstEncoding = TextUtils.htmlEncode(itemList.get(position).getMessage());
String secondEncoding =  Html.escapeHtml(itemList.get(position).getMessage());

1 个答案:

答案 0 :(得分:0)

你的HTML看起来很好,只是第一个被转义。如果您有转义字符串并且想要取消它,则可以使用standard behavior