我遇到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);
这个例子试图表明这一点:
请大胆!
第一行是粗体。这个不是。
但问题是:文本的第一行不会以粗体显示。
为什么不这样做?
答案 0 :(得分:18)
使用spannable字符串构建器在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);
答案 1 :(得分:2)
使用SpannableStringBuilder实例本身。
contentView.setText(sb);
使用您的代码输出:
答案 2 :(得分:2)
尝试以下方法。您需要将spannable字符串设置为textview。因此,将spannable字符串设置为您的文本,如下所示
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);
我尝试了以上操作,您可以在下面看到生成的快照。
答案 3 :(得分:0)
如果您在设备中使用自定义字体。我认为有一个愚蠢的错误。请在设备中将自定义字体更改为默认字体,然后重试。