我很好奇,给一个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);
但是它在文本里边使用数字位置。有更简单的方法么?
这种情况下,每个人都想知道怎么做,这是一种方法:
mBox = new TextView(context);
mBox.setText(Html.fromHtml("<b>" + title + "</b>" + "<br />" +
"<small>" + description + "</small>" + "<br />" +
"<small>" + DateAdded + "</small>"));
这个非官方的列表是这个方法每个关键字的作用,请看this link
试试Html.fromHtml() ,然后把你的文本用粗体和斜的HTML标签标出来。
(例如:Html.fromHtml("This mixes <b>bold</b> and <i>italic</i> stuff);)
。
稍稍有点离题,但是我发现这个很有用,而这并没有提到。
如果我们想要从string.xml资源中读Html文本,这样就比较容易使得它本地化。CDATA使得这个成为可能:
<string name="my_text">
<![CDATA[
<b>Autor:</b> Mr Nice Guy<br/>
<b>Contact:</b> myemail@grail.com<br/>
<i>Copyright © 2011-2012 Intergalactic Spacebar Confederation </i>
]]>
</string>
从我们的java代码中,现在我们可以这样利用它:
TextView tv = (TextView) findViewById(R.id.myTextView);
tv.setText(Html.fromHtml(getString(R.string.my_text)));
我没有期盼这个可以起作用,但是它确实起作用了。
希望对你同样有用。
如果你不喜欢使用html,你可以创建一个styles.xml,像这样
Textview tv = (TextView)findViewById(R.id.textview);
SpannableString text = new SpannableString(myString);
text.setSpan(new TextAppearanceSpan(getContext(), R.style.myStyle),0,5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
text.setSpan(new TextAppearanceSpan(getContext(), R.style.myNextStyle),6,10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(text, TextView.BufferType.SPANNABLE);
Html.fromHtml 用html的形式组织text的样式,支持的html标签有限