在一个TextView中可以有多种样式么?

我很好奇,给一个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标签有限