Cómo configurar TextView textStyle como negrita, cursiva


843

¿Cómo establecer el TextViewestilo (negrita o cursiva) dentro de Java y sin usar el diseño XML?

En otras palabras, necesito escribir android:textStylecon Java.

Respuestas:


1885
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

Para mantener el tipo de letra anterior

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)

55
Para eliminar el estilo se puede usar Typeface.NORMAL
Brais Gabin

351
Si haces eso, perderás cualquier tipo de letra anterior. Para mantener el anterior, haga algo como textView.setTypeface (textView.getTypeface (), Typeface.BOLD_ITALIC);
leocadiotina

34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);no eliminará el estilo en negrita o cursiva de a TextView. Tendrá que usar textView.setTypeface(null, Typeface.NORMAL);para eso.
Jarett Millard

58
Para mantener cualquier tipo de letra anterior, pero para deshacerse del estilo en negrita o cursiva, use el siguiente código:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
Shnkc

66
Gracias @Shnkc, me apuntaste en la dirección correcta. En realidad solo necesitas: textView.setTypeface (Typeface.create (textView.getTypeface (), Typeface.NORMAL));
PedroHidalgo

271

Pruebe esto para configurarlo en TextViewnegrita o cursiva

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

14
Por cierto, si desea borrar un estilo de letra existente, deberá hacer algo diferente, por ejemplo:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb

@ greg7gkb tv.setTypeface(null, Typeface.BOLD);¿no hará esto lo mismo (borrar un estilo de letra existente)?
Prabs

Pasar nulo a setTypeface () significa que TextView usa un valor predeterminado codificado que puede ser diferente del Typeface establecido previamente.
greg7gkb

142

Programáticamente:

Puedes hacerlo mediante programación usando 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:

Puede configurarlo directamente en un archivo XML <TextView />como:

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

11
El interlocutor preguntó cómo hacerlo sin usar el diseño XML.
JulianSymes

66
Compruebe la pregunta with in Java and without using XMLpor cierto También ayudará a otros.
Pratik Butani

55
Si. Vine aquí a través de Google y me ayudó. Gracias :)
Atul

96

Tienes dos opciones:

Opción 1 (solo funciona para negrita, cursiva y subrayado):

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));

Opcion 2:

Use un Spannable ; es más complicado, pero puede modificar dinámicamente los atributos del texto (no solo negrita / cursiva, sino también colores).


66
Con typeFaceusted puede establecer un estilo único para todo el texto.
Gabriel Negut

2
cuando intento en mi fila personalizada, ¿no entiendo por qué? Cadena s1 = "<b> Estás en: </b>"; holder.address = (TextView) convertView.findViewById (R.id.address_text_view); holder.address.setText (Html.fromHtml (s1) + track.getAddress ());
Shylendra Madda

2
Este método es un gran estilo de texto parcial. Como una cita dentro de una vista de texto grande.
Salih Erikci

1
El primer método no funciona en mi caso private void createTextView (Título de cadena, Texto de cadena) {textView = new TextView (this); textView.setTextSize (17); textView.setText (Html.fromHtml ("<b>" + título + "</b>") + ":" + texto); }
garenyondem

1
Las opciones spannable y fromHTML pueden ralentizar la escritura / setText si el texto es grande debido a los nuevos cálculos de diseño. Evítalo si tienes otros métodos disponibles.
Eugene Kartoyev

43

Programáticamente:

Puedes hacerlo programáticamente usando el setTypeface()método:

A continuación se muestra el código para el tipo de letra predeterminado

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

y si quieres configurar Tipografía personalizada :

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:

Puede configurar directamente en un archivo XML de <TextView />esta manera:

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

O puede configurar su fuente favorita (de los activos). para más información ver enlace


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

ahora establezca las textviewpropiedades ..

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

11

Simplemente si quieres poner el texto en negrita . escriba esta línea en su diseño en la propiedad de vista de texto

android:textStyle="bold"

10
TextView text = (TextView)findViewById(R.layout.textName);
text.setTypeface(null,Typeface.BOLD);

10

Podría ser

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

y en cursiva debería poder reemplazarse Typeface.DEFAULT_BOLDpor Typeface.DEFAULT_ITALC.

Déjame saber cómo funciona.


10

intente esto para configurar su TextView estilo por código java

txt1.setTypeface(null,Typeface.BOLD_ITALIC);


7

Prueba esto:

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

6

Prueba esto:

TextView textview = (TextView)findViewById(R.id.textview_idname);
textview.setTypeface(null,Typeface.BOLD);

4

La forma estándar de hacerlo es utilizar los estilos personalizados. Ex-

En styles.xmlagregar lo siguiente.

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyApp.TextAppearance.LoginText">
    <item name="android:textStyle">bold|italic</item>
</style>

Aplica este estilo a tu de la TextViewsiguiente manera.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/MyApp.TextAppearance.LoginText" />

4

Una forma de hacerlo es:

myTextView.setTypeface(null, Typeface.ITALIC);
myTextView.setTypeface(null, Typeface.BOLD_ITALIC);
myTextView.setTypeface(null, Typeface.BOLD);
myTextView.setTypeface(null, Typeface.NORMAL);

Otra opción si desea mantener el tipo de letra anterior y no quiere perder la aplicada anteriormente:

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

4
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

Para mantener el tipo de letra anterior

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)

3

Puedes intentarlo así:

<string name="title"><u><b><i>Your Text</i></b></u></string>

3

La forma más fácil de hacerlo según los criterios de selección de estilo es:

String pre = "", post = "";

if(isBold){
    pre += "<b>"; post += "</b>";
}
if(isItalic){
    pre += "<i>"; post += "</i>";
}
if(isUnderline){
    pre += "<u>"; post += "</u>";
}

textView.setText(Html.fromHtml(pre + editText.getText().toString()+ post));
// you can also use it with EidtText
editText.setText(Html.fromHtml(pre + editText.getText().toString()+ post));

2

Como quiero usar una fuente personalizada, solo la conjunción de varias respuestas me funciona. Obviamente, la configuración en mi layout.xmlgusto android:textStlyle="italic"fue ignorada por AOS. Así que finalmente tuve que hacer lo siguiente: en strings.xmlla cadena de destino se declaró como:

<string name="txt_sign"><i>The information blah blah ...</i></string>

luego adicionalmente en código:

TextView textSign = (TextView) findViewById(R.id.txt_sign);
FontHelper.setSomeCustomFont(textSign);
textSign.setTypeface(textSign.getTypeface(), Typeface.ITALIC);

No probé la Spannableopción (que supongo que DEBE funcionar) pero

textSign.setText(Html.fromHtml(getString(R.string.txt_sign))) 

no tuvo efecto Además, si elimino el italic tagde strings.xmldejar el setTypeface()solo, tampoco tiene efecto. Android complicado ...


2

Y como se explica aquí Recursos para cadenas de desarrolladores de Android si necesita usar parámetros en su recurso de texto con estilo, debe escapar de los corchetes de apertura

<resources>
<string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string>
</resources>

y llame a formatHtml (cadena)

Resources res = getResources();
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
CharSequence styledText = Html.fromHtml(text);

2

En mi caso:

1 - establecer texto

2 - establecer tipo de letra

holder.title.setText(item.nome);
holder.title.setTypeface(null, Typeface.BOLD);

1

Esto es lo único que me funcionó en un OnePlus 5T configurado con la fuente OnePlus Slate ™:

textView.setTypeface(Typeface.create(textView.getTypeface(), useBold ? Typeface.BOLD : Typeface.NORMAL));

Otros métodos harían que recurriera a Roboto cuando BOLD o NORMAL.


1

Al usar etiquetas simplificadas con AndroidX, considere usar HtmlCompat.fromHtml ()

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(HtmlCompat.fromHtml(s, FROM_HTML_MODE_LEGACY));

0

La mejor manera es definirlo en styles.xml

<style name="common_txt_style_heading" parent="android:style/Widget.TextView">
        <item name="android:textSize">@dimen/common_txtsize_heading</item>
        <item name="android:textColor">@color/color_black</item>
        <item name="android:textStyle">bold|italic</item>
</style>

Y actualízalo en TextView

  <TextView
     android:id="@+id/txt_userprofile"
     style="@style/common_txt_style_heading"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_centerHorizontal="true"
     android:layout_marginTop="@dimen/margin_small"
     android:text="@string/some_heading" />

0
AppCompatTextView text =(AppCompatTextView)findViewById(R.layout.appCompatTextView1);
text.setTypeface(null,Typeface.BOLD);

Use el método anterior para configurar el tipo de letra mediante programación.


0

1) Puede configurarlo con TypeFace. 2) Puede usar directamente en strings.xml (en su carpeta de valores) 3) Puede String myNewString = "Este es mi texto en negrita Esta es mi cadena en cursiva Esta es mi cadena subrayada


0

Puede configurar los diferentes tipos de letra con el ejemplo que se muestra a continuación:

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

O si desea establecer una fuente diferente y su tipo de letra. Añádelo a un activo o carpeta sin procesar y luego úsalo como

  Typeface face= Typeface.createFromAsset(getAssets(), "font/font.ttf");
  tv1.setTypeface(face);

  Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf");
  tv2.setTypeface(face1);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.