web-dev-qa-db-fra.com

Comment définir le style d'un textView par programme?

Je crée un textView par programme. Existe-t-il un moyen de définir le style de ce textView? Quelque chose de semblable à

style="@Android:style/TextAppearance.DeviceDefault.Small"

que j'utiliserais si j'avais un fichier layout.xml.

24
lokoko

Vous ne pouvez pas définir par programmation le style d'une vue, mais vous pouvez peut-être faire quelque chose comme textView.setTextAppearance(context, Android.R.style.TextAppearance_Small);.

44
Matthew

Il n'est actuellement pas possible de définir le style d'une vue par programme. 

Pour contourner ce problème, vous pouvez créer un fichier xml de présentation de gabarit avec le style attribué, par exemple dans res/layout, créez tvtemplate.xml comme avec le contenu suivant:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:text="This is a template"
        style="@Android:style/TextAppearance.DeviceDefault.Small" />

puis gonflez-le pour instancier votre nouveau TextView:

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvtemplate, null);
26
Raghav Sood

En fait, cela est possible à partir du niveau 21 de l’API.

TextView a un constructeur 4 paramètres :

TextView (Context context, 
          AttributeSet attrs, 
          int defStyleAttr, 
          int defStyleRes)

Les deux paramètres du milieu ne sont pas nécessaires dans ce cas. Le code suivant crée un TextView directement dans une activité et définit uniquement sa ressource de style:

TextView myStyledTextView = new TextView(this, null, 0, R.style.my_style);
5
John Rattz

Version Compat (à cause de la désapprobation dans api 23):

TextViewCompat.setTextAppearance(textView, Android.R.style.TextAppearance_DeviceDefault_Small);
4
shmakova

Essaye ça

textview.setTextAppearance(context, R.style.yourstyle);

cela peut ne pas fonctionner essayez de créer un XML avec le textview comme ceci

textviewstyle.xml

<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        style="@Android:style/TextAppearance.DeviceDefault.Small" />

Pour obtenir le style souhaité, gonflez le xml contenant textview

TextView myText = (TextView)getLayoutInflater().inflate(R.layout.tvstyle, null);
4
Pragnani

Pour les vues générées au moment de l'exécution (en code), vous pouvez passer le style au constructeur: View (Context, AttributeSet, int)

Dans les autres cas, vous devez appeler différentes méthodes pour modifier l'apparence.

1
outlying
@Deprecated
public void setTextAppearance(Context context, @StyleRes int resId)

cette méthode est déconseillée à partir d'Android SKD 23.

vous pouvez utiliser la version sûre:

if (Build.VERSION.SDK_INT < 23) {
    super.setTextAppearance(context, resId);
} else {
    super.setTextAppearance(resId);
}
0
Robert Grabiński