如何设置TextView的文本样式,例如加粗、斜体?

957

如何在Java中设置TextView的样式(粗体或斜体),而不使用XML布局?

换句话说,我需要用Java写android:textStyle

29个回答

2095
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);
保持之前的字体。
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)

7
可以使用 Typeface.NORMAL 来移除字体样式。 - Brais Gabin
371
如果您这样做,您将失去之前的字体。为了保留之前的字体,可以采取以下方法: textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC); - leocadiotine
42
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);不会移除TextView中的加粗或斜体样式。你需要使用textView.setTypeface(null, Typeface.NORMAL);来实现这一点。 - Jarett Millard
79
要保留原来的字体样式但去除加粗或斜体风格,请使用以下代码:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL); - Shnkc
9
谢谢@Shnkc,你指引了我正确的方向。实际上你只需要:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL)); - Pedro Hidalgo
显示剩余4条评论

290

尝试这个方法在 TextView 上设置粗体或斜体

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);

18
顺便提一下,如果你想清除现有的字体样式,你需要做一些不同的事情,例如:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL)); - greg7gkb
@greg7gkb tv.setTypeface(null, Typeface.BOLD); 这样做不会清除现有的字体样式吗? - Prabs
将 null 传递到 setTypeface() 中意味着 TextView 使用了一个硬编码的默认值,这个默认值可能与先前设置的 Typeface 不同。 - greg7gkb

166

通过编程实现:

您可以使用setTypeface()进行编程实现:

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

XML:

你可以在XML文件中直接在<TextView />中设置,例如:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

11
如何在不使用 XML 布局的情况下完成? - JulianSymes
8
检查Java中的问题,且不使用XML。顺便说一下,这将有助于其他人。 - Pratik Butani
10
是的。我是通过谷歌来到这里的,它帮了我很大的忙。谢谢 :) - Atul

103

你有两个选项:

选项1(仅适用于加粗、斜体和下划线):

String s = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!"
TextView tv = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);
tv.setText(Html.fromHtml(s));

选项2:

使用Spannable,这样更加复杂,但是你可以动态修改文本属性(不仅限于粗体/斜体,还包括颜色)。


6
使用 "typeFace" 可以为整个文本设置单一的样式。 - Gabriel Negut
2
当我在我的自定义行中尝试时,它没有得到为什么?String s1 =“<b>您在此处:</b>”;holder.address =(TextView)convertView.findViewById(R.id.address_text_view);holder.address.setText(Html.fromHtml(s1)+ track.getAddress()); - Shailendra Madda
2
这个方法非常适合部分文本样式。就像在大型文本视图中引用一句话。 - Salih Erikci
1
第一种方法在我的情况下不起作用private void createTextView(String title, String text) { textView = new TextView(this); textView.setTextSize(17); textView.setText(Html.fromHtml("<b>" + title + "</b>") + " : " + text); } - garenyondem
1
Spannable和fromHTML选项可能会因为布局重新计算而导致输入/设置文本变慢,尤其是在文本较大的情况下。如果有其他可用的方法,请避免使用它。 - Eugene Kartoyev
显示剩余4条评论

54

以编程方式实现:

您可以使用 setTypeface()方法进行编程实现:

以下是默认Typeface的代码

textView.setTypeface(null, Typeface.NORMAL);      // for Normal Text
textView.setTypeface(null, Typeface.BOLD);        // for Bold only
textView.setTypeface(null, Typeface.ITALIC);      // for Italic
textView.setTypeface(null, Typeface.BOLD_ITALIC); // for Bold and Italic

如果您想设置自定义字体

textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);      // for Normal Text
textView.setTypeface(textView.getTypeface(), Typeface.BOLD);        // for Bold only
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);      // for Italic
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC); // for Bold and Italic

XML:

您可以直接在XML文件中的<TextView />标签内进行设置,如下所示:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

或者您可以设置您喜欢的字体(来自资产)。了解更多信息,请查看链接


我一直在尝试使用这种方式,但当字体设置为Typeface.BOLD时,一切开始变得奇怪。文本会折叠(垂直对齐而不是水平对齐,完全无法阅读),按钮停止响应,与监听器混淆...只有当我将自定义字体设置为Typeface.NORMAL时,它才恢复正常。 - Ezequiel Adrian

15
TextView text = (TextView)findViewById(R.id.THE_TEXTVIEW_ID);

现在设置textview的属性。

text.setTypeface(null, Typeface.BOLD);  //-- for only bold the text
text.setTypeface(null, Typeface.BOLD_ITALIC);  //-- for  bold & italic the text
text.setTypeface(null, Typeface.ITALIC);  // -- for  italic the text

15

您可以使用以下示例设置不同的字体:

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
如果您想设置不同的字体及其字型,请将其添加到资产或原始文件夹,然后像这样使用:
  Typeface face= Typeface.createFromAsset(getAssets(), "font/font.ttf");
  tv1.setTypeface(face);

  Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf");
  tv2.setTypeface(face1);

13

如果您想使文字变为粗体,请在文本视图属性中编写此行。

android:textStyle="bold"

11

它会

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

Typeface.DEFAULT_BOLD 替换为 Typeface.DEFAULT_ITALC 后,加粗和斜体应该都能正常使用。

请告诉我它是否有效。


11

试试这个:

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接