Comment définir TextStyle textStyle comme gras, italique

843

Comment définir le TextViewstyle (gras ou italique) dans Java et sans utiliser la disposition XML?

En d'autres termes, j'ai besoin d'écrire android:textStyleavec Java.

Juste moi
la source

Réponses:

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

Pour conserver la police précédente

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)
Tanmay Mandal
la source
5
Pour supprimer le style peut être utilisé Typeface.NORMAL
Brais Gabin
351
Si vous faites cela, vous perdrez toute police de caractères précédente. Pour conserver le précédent, faites quelque chose comme textView.setTypeface (textView.getTypeface (), Typeface.BOLD_ITALIC);
léocadiotine
34
textView.setTypeface(textView.getTypeface(), Typeface.NORMAL);ne supprimera pas le style gras ou italique de a TextView. Vous devrez utiliser textView.setTypeface(null, Typeface.NORMAL);pour cela.
Jarett Millard
58
Pour conserver toute police de caractères précédente mais pour vous débarrasser du style gras ou italique, utilisez le code suivant:textView.setTypeface(Typeface.create(textView.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
Shnkc
6
Merci @Shnkc, vous m'avez indiqué la bonne direction. En fait, vous avez juste besoin de: textView.setTypeface (Typeface.create (textView.getTypeface (), Typeface.NORMAL));
PedroHidalgo
271

Essayez ceci pour activer le TextViewgras ou l'italique

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);
textView.setTypeface(textView.getTypeface(), Typeface.ITALIC);
textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC);
Niranj Patel
la source
14
Par ailleurs, si vous voulez effacer un style de police existant, vous devrez faire quelque chose de différent, par exemple:tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL));
greg7gkb
@ greg7gkb tv.setTypeface(null, Typeface.BOLD);ne fera- t- il pas de même (effacer un style de police existant)?
Prabs
Passer null dans setTypeface () signifie que TextView utilise une valeur par défaut codée en dur qui peut être différente de la police précédemment définie.
greg7gkb
142

Par programme:

Vous pouvez le faire par programme en utilisant 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:

Vous pouvez définir directement dans un fichier XML <TextView />comme:

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"
Pratik Butani
la source
11
Questioner a demandé comment le faire sans utiliser la disposition XML.
JulianSymes
6
Vérifiez la question with in Java and without using XMLAu fait, cela aidera également les autres.
Pratik Butani du
5
Oui. Je suis venu ici via Google et cela m'a juste aidé. Merci :)
Atul
96

Vous avez deux options:

Option 1 (ne fonctionne que pour les caractères gras, italique et souligné):

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

Option 2:

Utilisez un Spannable ; c'est plus compliqué, mais vous pouvez modifier dynamiquement les attributs de texte (non seulement gras / italique, mais aussi les couleurs).

Gabriel Negut
la source
6
Avec, typeFacevous pouvez définir un style unique pour tout le texte.
Gabriel Negut
2
quand j'essaie dans ma rangée personnalisée, ça ne comprend pas pourquoi? String s1 = "<b> Vous êtes: </b>"; holder.address = (TextView) convertView.findViewById (R.id.address_text_view); holder.address.setText (Html.fromHtml (s1) + track.getAddress ());
Shylendra Madda du
2
Cette méthode est un excellent style de texte partiel. Comme une citation dans une grande vue de texte.
Salih Erikci
1
La première méthode ne fonctionne pas dans mon cas private void createTextView (String title, String text) {textView = new TextView (this); textView.setTextSize (17); textView.setText (Html.fromHtml ("<b>" + title + "</b>") + ":" + text); }
garenyondem
1
Les options extensible et fromHTML peuvent ralentir la saisie / setText si le texte est volumineux en raison des recalculs de la mise en page. Évitez-le si vous disposez d'autres méthodes.
Eugene Kartoyev
43

Par programme:

Vous pouvez faire par programmation en utilisant la setTypeface()méthode:

Voici le code de la police par défaut

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

et si vous souhaitez définir une police de caractères personnalisée :

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:

Vous pouvez définir directement dans un fichier XML <TextView />comme ceci:

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

Ou vous pouvez définir votre police fav (à partir des ressources). pour plus d'informations, voir le lien

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

définissez maintenant les textviewpropriétés ..

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
la source
11

Tout simplement si vous voulez mettre du texte en gras . écrire cette ligne dans votre mise en page dans la propriété d'affichage de texte

android:textStyle="bold"
Charu ක
la source
10
TextView text = (TextView)findViewById(R.layout.textName);
text.setTypeface(null,Typeface.BOLD);
Khushi
la source
10

Ce serait

yourTextView.setTypeface(null,Typeface.DEFAULT_BOLD);

et l'italique devrait pouvoir être remplacé Typeface.DEFAULT_BOLDpar Typeface.DEFAULT_ITALC.

Faites-moi savoir comment cela fonctionne.

DustinRiley
la source
10

essayez ceci pour définir votre TextView style par le code java

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

Essaye ça:

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

Essaye ça:

TextView textview = (TextView)findViewById(R.id.textview_idname);
textview.setTypeface(null,Typeface.BOLD);
Ombre noire
la source
4

La manière standard de procéder consiste à utiliser les styles personnalisés. Ex-

Dans styles.xmlajouter ce qui suit.

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

Appliquez ce style à votre TextViewcomme suit.

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/MyApp.TextAppearance.LoginText" />
Shivanand Darur
la source
4

Vous pouvez notamment:

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

Une autre option si vous souhaitez conserver la police de caractères précédente et que vous ne voulez pas perdre la précédente application:

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
la source
4
textView.setTypeface(null, Typeface.BOLD_ITALIC);
textView.setTypeface(null, Typeface.BOLD);
textView.setTypeface(null, Typeface.ITALIC);
textView.setTypeface(null, Typeface.NORMAL);

Pour conserver la police précédente

textView.setTypeface(textView.getTypeface(), Typeface.BOLD_ITALIC)
Amirhf
la source
3

Vous pouvez essayer comme ceci:

<string name="title"><u><b><i>Your Text</i></b></u></string>
Vishal Vaishnav
la source
3

La manière la plus simple que vous pouvez faire en fonction des critères de sélection de style est:

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
la source
2

Puisque je veux utiliser une police personnalisée, seule la conjonction de plusieurs réponses me convient. De toute évidence, les paramètres de mon layout.xmlgoût ont android:textStlyle="italic"été ignorés par AOS. Donc, finalement, je devais faire comme suit: dans strings.xmlla chaîne cible a été déclarée comme:

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

puis en plus dans le code:

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

Je n'ai pas essayé l' Spannableoption (qui je suppose DOIT fonctionner) mais

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

n'a eu aucun effet. De plus, si je retire le italic tagde strings.xmllaisser le setTypeface()tout seul, cela n'a aucun effet non plus. Android délicat ...

Stan
la source
2

Et comme expliqué ici Ressources pour les développeurs Android Si vous devez utiliser des paramètres dans votre ressource de texte stylé, vous devez échapper aux crochets d'ouverture

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

et appelez formatHtml (chaîne)

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

Dans mon cas:

1 - définir le texte

2 - définir la police

holder.title.setText(item.nome);
holder.title.setTypeface(null, Typeface.BOLD);
FlipNovid
la source
1

C'est la seule chose qui a fonctionné pour moi sur un OnePlus 5T configuré avec la police OnePlus Slate ™:

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

D'autres méthodes le feraient retomber sur Roboto lorsque BOLD ou NORMAL.

droid256
la source
1

Lors de l'utilisation de balises simplifiées avec AndroidX, envisagez d'utiliser 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
la source
0

Le meilleur moyen est de le définir dans 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>

Et mettez-le à jour dans 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
la source
0
AppCompatTextView text =(AppCompatTextView)findViewById(R.layout.appCompatTextView1);
text.setTypeface(null,Typeface.BOLD);

Utilisez la méthode ci-dessus pour définir la police par programmation.

Tulsi
la source
0

1) Vous pouvez le définir avec TypeFace. 2) Vous pouvez utiliser directement dans strings.xml (dans votre dossier de valeurs) 3) Vous pouvez String myNewString = "Ceci est mon texte en gras Ceci est ma chaîne en italique Ceci est ma chaîne soulignée

Ujjwal Bassi
la source
0

Vous pouvez définir les différentes polices en utilisant l'exemple ci-dessous -

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

Ou si vous souhaitez définir une police différente et sa police de caractères. Ajoutez-le à l'actif ou au dossier brut, puis utilisez-le comme

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

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