2010-07-13 13 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

相关问题