web-dev-qa-db-fra.com

Comment changer le style d'un TextView à l'exécution

J'ai une application Android sur laquelle, lorsque l'utilisateur appuie sur une TextView, je souhaite appliquer un style défini.

Je pensais trouver un textview.setStyle() mais il n’existe pas. j'ai essayé 

textview.setTextAppearance();

mais ça ne marche pas.

92
Cris

Je l'ai fait en créant un nouveau fichier XML res/values/style.xml comme suit:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="Android:textStyle">bold|italic</item>
        <item name="Android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="Android:textStyle">normal</item>
        <item name="Android:textColor">#C0C0C0</item>
    </style>

</resources>

J'ai aussi une entrée dans mon fichier "strings.xml" comme ceci:

<color name="highlightedTextViewColor">#000088</color>
<color name="normalTextViewColor">#000044</color>

Ensuite, dans mon code, j'ai créé un ClickListener pour intercepter l'événement tap sur cet objet TextView: EDIT: À partir de l'API 23, "setTextAppearance" est obsolète

    myTextView.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){
                    //highlight the TextView
                    //myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    if (Build.VERSION.SDK_INT < 23) {
       myTextView.setTextAppearance(getApplicationContext(), R.style.boldText);
    } else {
       myTextView.setTextAppearance(R.style.boldText);
    }
     myTextView.setBackgroundResource(R.color.highlightedTextViewColor);
                }
            });

Pour revenir en arrière, vous utiliseriez ceci:

if (Build.VERSION.SDK_INT < 23) {
    myTextView.setTextAppearance(getApplicationContext(), R.style.normalText);
} else{
   myTextView.setTextAppearance(R.style.normalText);
}
myTextView.setBackgroundResource(R.color.normalTextViewColor);
137
Glenn

Comme Jonathan l'a suggéré, en utilisant textView.setTextTypeface, je viens de l'utiliser dans une application il y a quelques secondes.

textView.setTypeface(null, Typeface.BOLD); // Typeface.NORMAL, Typeface.ITALIC etc.
88
DKDiveDude
TextView tvCompany = (TextView)findViewById(R.layout.tvCompany);
tvCompany.setTypeface(null,Typeface.BOLD);

Vous pouvez le définir à partir du code. Police de caractère

11
Azhar

Par programme: exécution

Vous pouvez 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: Design Time

Vous pouvez également définir en XML:

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

J'espère que cela aidera

Sommé

3
Summved Jain

j'ai trouvé textView.setTypeface(Typeface.DEFAULT_BOLD); comme étant la méthode la plus simple.

2
sfera

essayez cette ligne de code. 

textview.setTypeface(textview.getTypeface(), Typeface.DEFAULT_BOLD);

ici, il obtiendra la police de caractères actuelle de cette vue de texte et la remplacera par une nouvelle police de caractères. La nouvelle police est DEFAULT_BOLD, mais vous pouvez en appliquer beaucoup plus. 

1
Md. Sajedul Karim

Selon le style que vous souhaitez définir, vous devez utiliser différentes méthodes. TextAppearance a son propre setter, TypeFace a son propre setter, l'arrière-plan a son propre setter, etc.

0
akohout

Voir doco pour setText () dans TextView http://developer.Android.com/reference/Android/widget/TextView.html

Pour styler vos chaînes, attachez les objets Android.text.style. * À SpannableString ou consultez la documentation Types de ressources disponibles pour obtenir un exemple de définition de texte mis en forme dans le fichier de ressources XML.

0
GSree