我已經將接收一些HTML格式的文本就像一個TextView:的TextView與Html.fromHtml格式問題
<p class="p1"><span class="s1"><strong>Name</strong> Mr. A</span></p>
<p class="p1"><span class="s1"><strong>Place:</strong> Somewhere over the rainbow...</span></p>
我使用這個代碼:
CharSequence sequence = Html.fromHtml(html);
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
text.setText(strBuilder);
止帶起來:
名稱:A \先生ñ\ n張地點:彩虹之上\ n \ n
問題,我不想 「\ n \ n」 我只是想要一個 「\ n」,所以我這樣做:
sequence = sequence.toString().replaceAll("\n\n", "\n");
結束:
名稱:A \ n張地點先生:彩虹之上\ n
,並刪除最後一個 「\ n」:
try {
int i = sequence.toString().lastIndexOf("\n");
sequence = new StringBuilder(sequence).replace(i, i + 1, "").toString();
} catch (Exception e) {
e.printStackTrace();
}
結束:
名稱:A \ n張地點先生:彩虹之上
完美的,就像我想要的,但現在所有的HTML格式了。 我該如何解決這種情況?
謝謝。
編輯1:
用戶巴斯麪包車斯坦建議我應該刪除StringBuilder
,但我沒有張貼的全部代碼。所以,我用一個StringBuilder
,因爲如果文本中包含URL
我做這樣的事情(完整代碼):
CharSequence sequence = Html.fromHtml(html);
sequence = sequence.toString().replaceAll("\n\n", "\n");
try {
int i = sequence.toString().lastIndexOf("\n");
sequence = new StringBuilder(sequence).replace(i, i + 1, "").toString();
} catch (Exception e) {
e.printStackTrace();
}
SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);
for (URLSpan span : urls) {
makeLinkClickable(context, strBuilder, span, color);
}
text.setText(strBuilder);
makeLinkClickable方法:
private void makeLinkClickable(final Context context, SpannableStringBuilder strBuilder, final URLSpan span, int color) {
int start = strBuilder.getSpanStart(span);
int end = strBuilder.getSpanEnd(span);
int flags = strBuilder.getSpanFlags(span);
strBuilder.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
...
}
}, start, end, flags);
strBuilder.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
strBuilder.removeSpan(span);
}
編輯2:
好了,所以我找出導致格式信息丟失的原因是,我忽略了從Html.fromHtml(html)
轉換而來的Spanned
文本。我想我必須刪除「\ n \ n」和最後一個「\ n」,而不會丟失Spanned
對象和所有Span
樣式等。對其執行操作...
我會用'
'來代替'\ n'。既然你想在HTML代碼中使用HTML換行符,而不是Java代碼。 –