2010-07-13 12 views
2

我有一個TextView,它將保存一個樣式化的多行字符串。由於數據是從不同的來源逐點繪製的,因此該文本是逐行生成的。在抓取每個字段時,我在新行上向TextView添加了一個Bold標題,然後將該字段的數據以斜體添加到新行中。如何在組裝字符串時爲TextView生成樣式文本?

示例格式:

截止日期
2010年7月22日

CSC 350

我可以這樣設置樣式:

Spannable str = (Spannable) textview.getText(); 

str.setSpan(new StyleSpan(android.graphics.Typeface.Bold), 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
str.setSpan(new StyleSpan(android.graphics.Typeface.Italic), 8, 21, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
str.setSpan(new StyleSpan(android.graphics.Typeface.Bold), 21, 27, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
str.setSpan(new StyleSpan(android.graphics.Typeface.Italic), 27, 33, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

但是這需要知道運行時每段文本的長度,這是無法管理的,因爲可以添加到textview的數據字段數量是可變的。

如何添加樣式,因爲我添加了每段文本而不是在添加了所有文本之後?

回答

3

將您的字符串標記爲<b><i>標記,然後使用Html.fromHtml(String)返回您正在查找的Spannable。

+0

如果您收到來自資源的樣式字符串,這樣對方的回答將是有益的:http://stackoverflow.com/questions/3235131/set-textview-text- from-html-formatted-string-resource-in-xml – 2011-08-21 11:42:18

0

您可以使用此:

textview.setTypeface(null, Typeface.BOLD_ITALIC); 
+1

樣式化整個文本視圖,而不是文本跨度。 – CodeFusionMobile 2011-01-27 17:40:49

0

你可以設置一個SpannableTextView的文本。這樣,您可以先創建文本,在需要時添加樣式信息,並根據需要將其添加到TextView中。

0

您應該檢查HTML類是如何做到的。我將解析輸入並即時生成spannable。

0

我知道這個問題有點老,但因爲它是谷歌頂部,我想扔在developer page作爲一個很好的資源。底部包含有關幫助器方法以編程方式設置文本樣式的建議。

1

Html.fromHtml(String)攜帶更多的行李比它更輕量級SpannableString類。只要有可能,我會建議您避免使用fromHtml來設置字符串的樣式。

對於您的情況,您可以使用SpannableStringBuilder構建字符串,然後使用最終的樣式化字符串設置TextView文本。

// set the text 
SpannableString s1 = new SpannableString("Due Date\n"); 
SpannableString s2 = new SpannableString("July 22, 2010\n"); 
SpannableString s3 = new SpannableString("Course\n"); 
SpannableString s4 = new SpannableString("CSC 350\n"); 

// set the style 
s1.setSpan(new StyleSpan(Typeface.BOLD), 0, s1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
s2.setSpan(new StyleSpan(Typeface.ITALIC), 0, s2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
s3.setSpan(new StyleSpan(Typeface.BOLD), 0, s3.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
s4.setSpan(new StyleSpan(Typeface.ITALIC), 0, s4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

// build the string 
SpannableStringBuilder builder = new SpannableStringBuilder(); 
builder.append(s1); 
builder.append(s2); 
builder.append(s3); 
builder.append(s4); 

// set the text view with the styled text 
textView.setText(builder); 

我設置了文本和樣式一個接一個,但在實際使用中,這可以很容易地在循環中完成。下面是結果:

enter image description here

相關問題