J'essaie d'utiliser le TextView
constructeur avec un style comme celui-ci:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style);
Cependant, lorsque je fais cela, la vue texte ne semble pas prendre le style (j'ai vérifié le style en le plaçant sur un objet statique).
J'ai également essayé d'utiliser myText.setTextAppearance(MyActivity.this, R.style.my_style)
mais cela ne fonctionne pas non plus.
Vous pouvez créer un style générique et le réutiliser sur plusieurs vues de texte comme celle ci-dessous:
Modifier: cela fait référence au contexte
la source
TextViewCompat.setTextAppearance
Vous pouvez passer un ContextThemeWrapper au constructeur comme ceci:
la source
<style name="TabButton"><item name="android:background">@drawable/tabbar_button_bkgnd</item>...</style>
. Et puis je l' invoquons avec une construction:new Button(new ContextThemeWrapper(context, R.style.TabButton));
. Mais le bouton ignore simplement mes paramètres. Suis-je en train de faire quelque chose de mal ici?parent="@android:style/Widget.Button"
parent
n'a pas changé un peu. Je viens donc d'aller de l'avant avec lainflate
solution.new Button(new ContextThemeWrapper(context, R.style.TabButton), null, 0)
. Sinon, le style de bouton par défaut sera appliqué et ce style remplacera le style de bouton que vous avez fusionné dans le thème via ContextThemeWrapper.Vous pouvez définir le style dans le constructeur (mais les styles ne peuvent pas être modifiés / définis dynamiquement).
View(Context, AttributeSet, int)
(leint
est un attribut du thème actuel qui contient une référence à un style)Réponse de Romain Guy
référence
la source
Le paramètre int
defStyleAttr
ne spécifie pas le style. De la documentation Android:Pour configurer le style dans le constructeur View, nous avons 2 solutions possibles:
Avec l'utilisation de ContextThemeWrapper:
Avec constructeur à quatre arguments (disponible à partir de LOLLIPOP):
Élément clé pour les deux solutions - le
defStyleAttr
paramètre doit être 0 pour appliquer notre style à la vue.la source
La modification dynamique des styles n'est pas encore prise en charge. Vous devez définir le style avant la création de la vue, via XML.
la source
La réponse acceptée était une excellente solution pour moi. La seule chose à ajouter concerne la
inflate()
méthode.Dans la réponse acceptée, tous les
android:layout_*
paramètres ne seront pas appliqués.La raison n'est aucun moyen de l'ajuster, la cause a
null
été transmise commeViewGroup parent
.Vous pouvez l'utiliser comme ceci:
View view = inflater.inflate(R.layout.view, parent, false);
et le
parent
est leViewGroup
, d'où vous souhaitez réglerandroid:layout_*
.Dans ce cas, toutes les propriétés relatives seront définies.
J'espère que ce sera utile pour quelqu'un.
la source
Lorsque vous utilisez des vues personnalisées qui peuvent utiliser l'héritage de style (ou des attributs stylables d'événement), vous devez modifier le deuxième constructeur afin de ne pas perdre le style. Cela a fonctionné pour moi, sans avoir besoin d'utiliser setTextAppearence () :
la source
J'ai aussi rencontré le problème et j'ai trouvé le moyen de définir le style par programmation. Peut-être que vous en avez tous besoin, donc je mets à jour là-bas.
Le troisième paramètre du constructeur View accepte un type d'attr dans votre thème comme code source ci-dessous:
Vous devez donc passer un type de R.attr. ** plutôt que R.style. **
Dans mes codes, j'ai fait les étapes suivantes:
Tout d'abord, personnalisez un attr personnalisé à utiliser par les thèmes dans attr.xml.
Deuxièmement, spécifiez votre style dans votre thème utilisé dans style.xml.
À la fin, utilisez-le!
la vue créée par programmation utilisera le style spécifié dans votre thème.
Vous pouvez essayer et espérer que cela fonctionnera parfaitement pour vous.
la source
Je n'ai testé qu'avec EditText mais vous pouvez utiliser la méthode
pour appliquer un style défini dans un fichier XML.
Sine, cette méthode appartient à View, je crois qu'elle fonctionnera avec n'importe quel élément de l'interface utilisateur.
Cordialement.
la source
Nous pouvons utiliser
TextViewCompact.setTextAppearance(textView, R.style.xyz)
.Doc Android pour référence.
la source