7

我有一个SpannableString对象的问题。

下面是一个简短的例子:

SpannableString spanstr = new SpannableString("Bold please!");
spanstr.setSpan(new StyleSpan(Typeface.BOLD), 0, spanstr.length(), 0);

SpannableStringBuilder sb = new SpannableStringBuilder();
sb.append(spanstr);
sb.append("\n"); // A newline
sb.append("The first line is bold. This one isn't.");

CharSequence cq = sb.subSequence(0, sb.length());
// ^There's no such method to return a SpannableString,
// so I try to return a CharSequence instead.

// And then, at last:
TextView contentView = (TextView) findViewById(R.id.some_id);
contentView.setText(cq);

该示例试图做的是显示这一点:

请大胆!
第一行是粗体。这个不是。

但问题是:文本的第一行不会以粗体显示。

为什么它没有达到预期的效果?

4

4 回答 4

20

使用可跨字符串生成器在 textview 中设置为文本:

contentView.setText(sb);

否则你可以这样做:

SpannableStringBuilder spanstr = new SpannableStringBuilder("Bold please!");
spanstr.setSpan(new StyleSpan(Typeface.BOLD), 0, spanstr.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanstr.append("\n");
spanstr.append("The first line is bold. This one isn't.");
contentView.setText(spanstr);
于 2013-04-17T13:17:51.240 回答
2

试试下面的。您需要将可扩展字符串设置为文本视图。因此,将可扩展字符串设置为您的文本,如下所示

String s= "The first line is bold. This one isn't";
String title="Bold Please!";  
TextView tv = (TextView) findViewById(R.id.some_id);
tv.setText("");
SpannableString ss1=  new SpannableString(title);
ss1.setSpan(new StyleSpan(Typeface.BOLD), 0, ss1.length(), 0);
tv.append(ss1);
tv.append("\n");
tv.append(s);

我尝试了上述方法,您可以在下面看到生成的快照。

在此处输入图像描述

于 2013-04-17T13:20:12.943 回答
2

使用 SpannableStringBuilder 实例本身。

contentView.setText(sb);

使用您的代码输出:

在此处输入图像描述

于 2013-04-17T13:18:54.360 回答
0

如果您在设备中使用自定义字体。我认为有这样一个愚蠢的错误。请在您的设备中将您的自定义字体更改为默认字体,然后重试。

于 2020-04-11T12:42:19.170 回答