我有一个TextView,它将保存一个样式化的多行字符串。这个文本是逐行生成的,因为数据是从不同的源逐位绘制的。当我抓住每个字段时,我在新行上向TextView添加一个Bold标题,然后我在新行中以斜体添加该字段的数据。
格式化示例:
截止日期
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中的数据字段可变。
如何在添加每段文字时添加样式,而不是在添加完所有文字后添加样式?
答案 0 :(得分:3)
根据需要使用<b>
和<i>
标记标记您的字符串,然后使用Html.fromHtml(String)返回您要查找的Spannable。
答案 1 :(得分:2)
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);
我逐个设置文本和样式,但在实际使用中,这可以很容易地在循环中完成。结果如下:
答案 2 :(得分:0)
你可以用这个:
textview.setTypeface(null, Typeface.BOLD_ITALIC);
答案 3 :(得分:0)
您可以将Spannable
设置为TextView
的文字。这样,您可以先创建文本,在需要时添加样式信息,然后根据需要将其放入TextView
。
答案 4 :(得分:0)
您应该检查HTML类的工作方式。我会解析输入并动态生成spannable。
答案 5 :(得分:0)
我知道这个问题有些陈旧但是因为它是谷歌的顶级,我想把developer page作为一个很好的资源。底部包含帮助方法的建议,以便以编程方式设置文本样式。