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.

Solo yo
fuente

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)
Tanmay Mandal
fuente
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);
Niranj Patel
fuente
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"
Pratik Butani
fuente
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).

Gabriel Negut
fuente
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

akshay
fuente
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
Akash Thakkar
fuente
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"
Charu ක
fuente
10
TextView text = (TextView)findViewById(R.layout.textName);
text.setTypeface(null,Typeface.BOLD);
Khushi
fuente
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.

DustinRiley
fuente
10

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

txt1.setTypeface(null,Typeface.BOLD_ITALIC);
Nikhil
fuente
7

Se usa textView.setTypeface(Typeface tf, int style);para establecer la propiedad de estilo de TextView. Consulte la documentación del desarrollador para obtener más información.

Dinesh Sharma
fuente
7

Prueba esto:

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
mohamad sheikhi
fuente
6

Prueba esto:

TextView textview = (TextView)findViewById(R.id.textview_idname);
textview.setTypeface(null,Typeface.BOLD);
Sombras
fuente
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" />
Shivanand Darur
fuente
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); 
param
fuente
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)
Amirhf
fuente
3

Puedes intentarlo así:

<string name="title"><u><b><i>Your Text</i></b></u></string>
Vishal Vaishnav
fuente
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));
muzamil
fuente
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 ...

Stan
fuente
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);
Angelo Nodari
fuente
2

En mi caso:

1 - establecer texto

2 - establecer tipo de letra

holder.title.setText(item.nome);
holder.title.setTypeface(null, Typeface.BOLD);
FlipNovid
fuente
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.

droid256
fuente
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));
aleksandrbel
fuente
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" />
Faheem
fuente
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.

Tulsi
fuente
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

Ujjwal Bassi
fuente
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);
Ravi
fuente