2015-09-25 46 views
2

我已經將接收一些HTML格式的文本就像一個TextView:的TextView與Html.fromHtml格式問題

<p class="p1"><span class="s1"><strong>Name</strong>&nbsp; Mr. A</span></p> 
<p class="p1"><span class="s1"><strong>Place:</strong>&nbsp; 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樣式等。對其執行操作...

+0

我會用'
'來代替'\ n'。既然你想在HTML代碼中使用HTML換行符,而不是Java代碼。 –

回答

3

問題是,您使用StringBuilder,這根本不需要。你可以將文本設置爲這樣的html:

myTextView.setText(Html.fromHtml("<h2>Title</h2><br><p>Description here</p>")); 

所以,只要刪除字符串生成器,你應該得到你想要的。


編輯好吧,你更新的問題後,我有一個建議: 當你之前替換\ n 你把它傳遞給Html.fromHtml()會發生什麼。 可能工作..

+0

是的,我不必使用StringBuilder,但問題依然存在。我更新了我的代碼。謝謝 – GuilhE

+0

改變了我的答案,不知道它是否會起作用,但我認爲你的方式已經正確。 –