使用 SpannableStringBuilder 时,为啥我的文本没有以样式显示?
Posted
技术标签:
【中文标题】使用 SpannableStringBuilder 时,为啥我的文本没有以样式显示?【英文标题】:Why doesn't my text show up with style when using SpannableStringBuilder?使用 SpannableStringBuilder 时,为什么我的文本没有以样式显示? 【发布时间】:2013-04-10 06:31:02 【问题描述】:我对 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);
这个例子试图做的是展示这个:
请大胆! 第一行是粗体。这个不是。
但问题是:文本的第一行不会以粗体显示。
为什么没有达到预期的效果?
【问题讨论】:
contentView.setText(sb); 我有同样的问题。您是否有任何解决方案。这不是一项艰苦的工作。但我还不能做出任何简单的解决方案。以上所有答案都不起作用 【参考方案1】:使用spannable string builder在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);
【讨论】:
【参考方案2】:使用 SpannableStringBuilder 实例本身。
contentView.setText(sb);
使用您的代码输出:
【讨论】:
非常感谢。我在spannableBuilder
上给toString()
打了电话,不明白为什么我没有看到带样式的文本。
@RenatKaitmazov 你不应该在 SpannableBuilder 上调用 toString() 方法,如果你这样做,它会认为它是字符串,而不是样式文本【参考方案3】:
试试下面的。您需要将可扩展字符串设置为文本视图。因此,将可扩展字符串设置为您的文本,如下所示
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);
我尝试了上述方法,您可以在下面看到生成的快照。
【讨论】:
谢谢..它就像我想要实现的魅力一样工作【参考方案4】:如果您在设备中使用自定义字体。我认为有这样一个愚蠢的错误。请将您的自定义字体更改为设备中的默认字体,然后重试。
【讨论】:
以上是关于使用 SpannableStringBuilder 时,为啥我的文本没有以样式显示?的主要内容,如果未能解决你的问题,请参考以下文章
在 TextView 中使用 SpannableStringBuilder 的段落间距
使用 SpannableStringBuilder 时,为啥我的文本没有以样式显示?
从 SpannableStringBuilder 获取 SpannableString 的最佳方法