Voici XML:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/LightStyle"
android:layout_width="fill_parent"
android:layout_height="55dip"
android:clickable="true"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
</RelativeLayout>
Comment définir un style
attribut par programme?
Réponses:
Techniquement, vous pouvez appliquer des styles par programme, avec des vues personnalisées de toute façon:
Le constructeur à un argument est celui utilisé lorsque vous instanciez des vues par programme.
Alors enchaînez ce constructeur au super qui prend un paramètre de style.
Ou comme @Dori l'a souligné simplement:
la source
http://developer.android.com/reference/android/widget/LinearLayout.html#LinearLayout(android.content.Context, android.util.AttributeSet, int)
. Avec LinearLayout, le niveau 11+ est requis.AttributeSet
?Button
. L'approche @Benjamin Piette fonctionne bien.Ce qui a fonctionné pour moi:
ET
la source
Mise à jour : au moment de répondre à cette question (mi-2012, niveau 14-15 de l'API), la définition de la vue par programmation n'était pas une option (même s'il y avait des solutions de contournement non triviales) alors que cela a été rendu possible après la dernière API versions. Voir la réponse de @ Blundell pour plus de détails.
VIEILLE réponse:
Vous ne pouvez pas encore définir le style d'une vue par programmation, mais vous pouvez trouver ce fil utile.
la source
textView.setTextAppearance(context, R.style.mystyle);
. Selon le document "Définit la couleur, la taille, le style, la couleur du conseil et la couleur de surbrillance du texte à partir de la ressource TextAppearance spécifiée." developer.android.com/reference/android/widget/… , int)Pour un nouveau Button / TextView:
Pour une instance existante:
Pour l'image ou les mises en page:
la source
Si vous souhaitez continuer à utiliser XML (ce que la réponse acceptée ne vous laisse pas faire) et définir le style après la création de la vue, vous pourrez peut-être utiliser la bibliothèque de Paris qui prend en charge un sous-ensemble de tous les attributs disponibles.
Puisque vous gonflez votre vue à partir de XML, vous devez spécifier un identifiant dans la mise en page:
Ensuite, lorsque vous devez modifier le style par programme, une fois la mise en page gonflée:
Pour en savoir plus: la liste des types et attributs de vue pris en charge (comprend l'arrière-plan, le remplissage, la marge, etc. et peut facilement être étendu) et les instructions d'installation avec une documentation supplémentaire .
Avertissement: je suis l'auteur original de ladite bibliothèque.
la source
Vous pouvez appliquer un style à votre activité en faisant:
ou Android par défaut:
dans votre activité, avant
setContentView()
.la source
Aucune des réponses fournies n'est correcte.
Vous POUVEZ définir le style par programme.
La réponse courte est de jeter un œil à http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/content/Context.java#435
Longue réponse. Voici mon extrait de code pour définir un style personnalisé défini par programme à votre vue:
1) Créez un style dans votre fichier styles.xml
N'oubliez pas de définir vos attributs personnalisés dans le fichier attrs.xml
Mon fichier attrsl.xml:
Notez que vous pouvez utiliser n'importe quel nom pour votre styleable (mon CustomWidget)
Permet maintenant de définir le style du widget par programmation Voici mon widget simple:
disposition:
Et enfin l'implémentation de la classe StyleLoader
Vous pouvez trouver un exemple pleinement fonctionnel sur https://github.com/Defuera/SetStylableProgramematic
la source
apply
méthode qui ne fait rien d'intéressant. La véritable signification du style est d' appliquer automatiquement un style visuel à toutes les futures vues ajoutées dynamiquement. Ce code ici ne peut bien sûr pas faire cela et il n'y a rien de dynamique ici, nous devons savoir quelles vues et quelles propriétés / champs définir.C'est une question assez ancienne mais la solution qui a fonctionné pour moi maintenant consiste à utiliser le 4ème paramètre du constructeur
defStyleRes
- si disponible .. à l'écran ... pour définir le styleOeuvres suivantes à mes fins (kotlin):
la source
Ceci est mon exemple simple, la clé est le
ContextThemeWrapper
wrapper, sans elle, mon style ne fonctionne pas et utilise le constructeur à trois paramètres de la vue.la source
la manière simple passe par le constructeur
la source
Je ne propose pas d'utiliser ContextThemeWrapper car il fait ceci:
Ce qui peut entraîner des résultats indésirables dans votre application. Au lieu de cela, je propose une nouvelle bibliothèque "paris" pour cela des ingénieurs d'Airbnb:
https://github.com/airbnb/paris
Mais après un certain temps d'utilisation, j'ai découvert qu'il était en fait assez limité et j'ai cessé de l'utiliser car il ne prend pas en charge beaucoup de propriétés dont j'ai besoin hors de la boîte, donc il faut vérifier et décider comme toujours.
la source
J'ai utilisé des vues définies en XML dans mon ViewGroup composite, les ai gonflées ajoutées à Viewgroup. De cette façon, je ne peux pas changer dynamiquement le style mais je peux faire quelques personnalisations de style. Mon composite:
}
et ma vue en xml où je peux assigner des styles:
la source
Vous pouvez créer le xml contenant la mise en page avec le style souhaité, puis modifier la ressource d'arrière-plan de votre vue, comme ceci .
la source