Come impostare TextView textStyle come grassetto, corsivo


843

Come impostare lo TextViewstile (grassetto o corsivo) all'interno di Java e senza utilizzare il layout XML?

In altre parole, devo scrivere android:textStylecon Java.

Risposte:


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

Per mantenere il carattere tipografico precedente

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

5
Per rimuovere lo stile si può usare Typeface.NORMAL
Brais Gabin

351
Se lo fai, perderai qualsiasi carattere tipografico precedente. Per mantenere quello precedente, fai qualcosa come textView.setTypeface (textView.getTypeface (), Typeface.BOLD_ITALIC);
leocadiotina,

34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);non rimuoverà lo stile grassetto o corsivo da a TextView. Dovrai usarlo textView.setTypeface(null, Typeface.NORMAL);per quello.
Jarett Millard,

58
Per mantenere qualsiasi carattere tipografico precedente ma per sbarazzarti dello stile grassetto o corsivo, usa il seguente codice:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
Shnkc

6
Grazie @Shnkc, mi hai indicato la giusta direzione. In realtà hai solo bisogno di: textView.setTypeface (Typeface.create (textView.getTypeface (), Typeface.NORMAL));
PedroHidalgo,

271

Prova questo TextViewper attivare grassetto o corsivo

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

14
Per inciso, se vuoi cancellare uno stile di carattere esistente, dovrai fare qualcosa di diverso, ad esempio:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb

@ greg7gkb tv.setTypeface(null, Typeface.BOLD);non farà lo stesso (cancella uno stile di carattere esistente)?
Prabs,

Passare null a setTypeface () significa che TextView utilizza un valore predefinito codificato che può essere diverso dal carattere tipografico precedentemente impostato.
greg7gkb

142

livello di programmazione:

Puoi fare programmaticamente 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:

È possibile impostare direttamente nel file XML <TextView />come:

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

11
L'interrogante ha chiesto come farlo senza utilizzare il layout XML.
JulianSymes,

6
Controlla la domanda with in Java and without using XMLA proposito Aiuterà anche gli altri.
Pratik Butani,

5
Sì. Sono venuto qui tramite Google e mi ha solo aiutato. Grazie :)
Atul,

96

Hai due opzioni:

Opzione 1 (funziona solo in grassetto, corsivo e sottolineato):

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

Opzione 2:

Usa uno Spannable ; è più complicato, ma puoi modificare dinamicamente gli attributi del testo (non solo grassetto / corsivo, ma anche i colori).


6
Con typeFacete puoi impostare un unico stile per l'intero testo.
Gabriel Negut,

2
quando sto provando nella mia riga personalizzata non capisco perché? String s1 = "<b> Ti trovi in: </b>"; holder.address = (TextView) convertView.findViewById (R.id.address_text_view); holder.address.setText (Html.fromHtml (s1) + track.getAddress ());
Shylendra Madda,

2
Questo metodo è un ottimo stile di testo parziale. Come una citazione in una grande visualizzazione di testo.
Salih Erikci,

1
Il primo metodo non funziona nel mio caso. Void privato createTextView (titolo stringa, testo stringa) {textView = new TextView (this); textView.setTextSize (17); textView.setText (Html.fromHtml ("<b>" + title + "</b>") + ":" + text); }
Garenyondem,

1
Le opzioni spannable e fromHTML possono rallentare la digitazione / setText se il testo è grande a causa del ricalcolo del layout. Evitalo se hai altri metodi disponibili.
Eugene Kartoyev,

43

livello di programmazione:

Puoi fare programmaticamente usando il setTypeface()metodo:

Di seguito è riportato il codice per il carattere tipografico predefinito

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

e se si desidera impostare un carattere personalizzato :

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:

È possibile impostare direttamente nel file XML in <TextView />questo modo:

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

Oppure puoi impostare il tuo carattere preferito (dalle risorse). per maggiori informazioni vedi link


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

ora imposta le textviewproprietà ..

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

Semplicemente se vuoi rendere il testo in grassetto . scrivere questa riga nel layout nella proprietà della vista di testo

android:textStyle="bold"

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

10

Sarebbe

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

e corsivo dovrebbe essere in grado di essere con la sostituzione Typeface.DEFAULT_BOLDcon Typeface.DEFAULT_ITALC.

Fammi sapere come funziona.


10

prova questo per impostare il tuo TextView stile con il codice java

txt1.setTypeface(null,Typeface.BOLD_ITALIC);


7

Prova questo:

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

6

Prova questo:

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

4

Il modo standard per farlo è usare gli stili personalizzati. Ex-

In styles.xmlaggiungere quanto segue.

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

Applica questo stile al tuo TextViewcome segue.

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

4

Un modo che puoi fare è:

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

Un'altra opzione se si desidera mantenere il carattere tipografico precedente e non si vuole perdere l'applicazione precedentemente:

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

Per mantenere il carattere tipografico precedente

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

3

Puoi provare così:

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

3

Il modo più semplice che puoi fare in base ai criteri di selezione dello stile è:

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

Dal momento che voglio usare un carattere personalizzato, solo la combinazione di più risposte funziona per me. Ovviamente le impostazioni nel mio layout.xmllike sono android:textStlyle="italic"state ignorate da AOS. Quindi alla fine ho dovuto fare come segue: nella strings.xmlstringa di destinazione è stato dichiarato come:

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

quindi anche nel codice:

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

Non ho provato l' Spannableopzione (che presumo DEVE funzionare) ma

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

non ha avuto effetto. Anche se mi tolgo la italic tagda strings.xmllasciare il setTypeface()tutto solo non ha alcun effetto neanche. Android ingannevole ...


2

E come spiegato qui Risorse per stringhe di sviluppatori Android se è necessario utilizzare i parametri nella risorsa di testo in stile, è necessario sfuggire alle parentesi quadre

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

e chiama formatHtml (stringa)

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

2

Nel mio caso:

1 - imposta il testo

2 - imposta il carattere tipografico

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

1

Questa è l'unica cosa che ha funzionato per me su un OnePlus 5T configurato con il font OnePlus Slate ™:

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

Altri metodi lo farebbero tornare a Roboto quando BOLD o NORMAL.


1

Durante l'utilizzo di tag semplificati con AndroidX, considera l'utilizzo di 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

Il modo migliore è definirlo in 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>

E aggiornalo in 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);

Utilizzare il metodo sopra per impostare il carattere tipicamente a livello di codice.


0

1) È possibile impostarlo con TypeFace. 2) Puoi usare direttamente in strings.xml (nella cartella dei valori) 3) Puoi mettere in stringa myNewString = "Questo è il mio testo in grassetto Questa è la mia stringa in corsivo Questa è la mia stringa sottolineata


0

È possibile impostare il carattere diverso utilizzando l'esempio riportato di seguito -

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

O se vuoi impostare un carattere diverso e il suo carattere tipografico. Aggiungilo alla risorsa o alla cartella non elaborata e poi usalo come

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

  Typeface face1= Typeface.createFromAsset(getAssets(), "font/font1.ttf");
  tv2.setTypeface(face1);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.