La création d'un Androïde Vue avec un style particulier par programmation
Autres questions dire que le style ne peut pas être défini par programmation, mais un View
peut être initialisé avec un style comme quand il est chargé à partir de XML.
Comment puis-je l'initialisation d'un View
avec un style particulier programmaticly (pas dans le XML)? J'ai essayé d'utiliser Affichage(Context context, AttributeSet attrs, int defStyle), mais je ne sais pas ce à analyser dans le deuxième argument. En passant null
résultats dans le View
pas affiché
Vous devez vous connecter pour publier un commentaire.
AttributeSet contient la liste des attributs spécifiés dans le xml (ex. layout_width, layout_height etc).
Si vous êtes de passage comme nulle, alors vous devez définir explicitement la hauteur/largeur de vue.
AttributeSet
ne semble pas avoir un constructeur. Est-il possible de construire sans l'aide de xml?Je vais avoir le même problème, mais je n'ai pas trouvé de moyen pratique pour directement définir un style de programmation, jusqu'à présent. Je voudrais remplir mon écran avec un lot de widgets, d'un type donné, disons boutons. Il est impossible de définir dans le fichier de mise en page. Je voudrais créer par programmation, mais je tiens également à définir leur style dans un style fichier xml.
La solution que j'ai mise au point consiste dans la définition de la juste de l'un de ces widgets dans le fichier de mise en page, créer tous les autres de la programmation, et de cloner le style d'info à partir de la première un à l'autre.
Un exemple de la façon suivante.
Dans le fichier de style, de définir le style de vos boutons. Par exemple:
Puis une sous-classe de la classe "Bouton", par la dérivation d'une classe "NiceButton". Définir le constructeur qui sera nécessaire pour le inflater:
Ensuite définir un autre constructeur, dont le but est de cloner un bouton existant:
Dans votre fichier de mise en page, définir le premier de vos boutons. Par exemple, supposons que vous souhaitez mettre vos boutons dans un tableau:
Avis que le nom complet de la classe widget est utilisé; évidemment, vous aurez à les remplacer com.mydomain.mypackage avec le nom du package.
Dans votre activité, vous souhaiterez peut-être définir un tableau qui va contenir une référence à tous les boutons, et un auditeur à être appelée lorsque le bouton est pressé:
Remarquez comment le point de vue de l'id est utilisé comme un index dans le tableau de boutons. Vous aurez donc besoin de vos boutons pour avoir un id de 0 à n-1.
Enfin, ici, c'est la façon dont vous pouvez créer vos boutons dans la méthode onCreate:
Voici comment l'écran apparaît après avoir appuyé sur quelques boutons:
Bien, il y a un peu de code jeu, mais en fin de compte, vous pouvez créer autant de widgets que vous voulez de la programmation, et ont encore leurs attributs définis comme un style.
Si vous voulez le style d'un point de vue, vous avez 2 choix: le plus simple est de spécifier tous les éléments dans le code:
L'autre option est de définir le style de XML, et de l'appliquer à la vue. Dans le cas général, vous pouvez utiliser un
ContextThemeWrapper
pour cela:De modifier le texte et les attributs liés à un TextView (ou de ses sous-classes comme le Bouton) il y a une méthode spéciale:
bouton.setTextAppearance(contexte, R. de style.MyTextStyle);
Ce dernier ne peut pas être utilisé pour modifier tous les attributs; par exemple pour changer de rembourrage, vous devez utiliser un
ContextThemeWrapper
. Mais pour la couleur du texte, taille, etc. vous pouvez utilisersetTextAppearance
.