我很好奇,给一个TextView中的不同段落的文字能否设置不同的样式。例如,我设置了像下边这样的文字:
descbox.setText(line1+ "\n" + line2+ "\n" + word1+ "\t" + word2+ "\t" + word3);
现在,给每段文字都有一个不同的样式是否可能呢?我的意思是第一行粗体,第一个文字正常等等
我发现了这个
EditText vw = (EditText)findViewById(R.id.text);
vw.setText("Italic, highlighted, bold.");
TextView.BufferType.SPANNABLE);
Spannable str = vw.getText();
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 21, str.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
但是它在文本里边使用数字位置。有更简单的方法么?
你可以使用html标签来实现,比如:
String just = "我是正的";
String skew = "我是斜的";
mText.setText(Html.fromHtml(just +"
"+""+skew));
安卓里有不同的span string,可以给任何位置的文字设置显示效果
你的目的是不想每次都写数字这么麻烦,那就简单了,你只需要写一个方法去获取各个段落的字符数然后再根据这些字符数去计算起始与结束就可以,例如
private int[] getStrIndex(final String string1, final String string2){
final int[] strIndex = {0, string1.length()-1, string1.length(), string2.length()-1}
return strindex;
}
你只需要传递你的line1、line2给它就可以了
好像这样
int[] aaa = getStrIndex(line1,line2);
然后你就可以
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), aaa[0], aaa[1], Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
str.setSpan(new BackgroundColorSpan(0xFFFFFF00), aaa[2], aaa[3], Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
这里只提供个思路,不知道对你有没有帮助
可以有多重样式,如果达不到想要效果,也可以自定义。
在后台为数据做一个标记,然后在前台加载时判断,选择不同样式
使用 SpannableString&SpannableStringBuilder来定制文本就行
http://blog.csdn.net/zhaizu/article/details/52740642 可以看一下这篇文章,textview的高级用法总结,如果有帮助请给一下分,谢谢