getWidth() et getHeight() retourne toujours 0. Affichage personnalisé
Dans un Fragment, je suis gonfler une Mise en page avec plusieurs enfants de Vue. J'ai besoin d'obtenir les dimensions (largeur et hauteur) de l'un d'eux qui est un affichage personnalisé.
À l'intérieur de la vue personnalisée de classe, je peux le faire facilement. Mais si j'essaie de le faire à partir du fragment, je reçois toujours 0 comme dimensions.
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
View culoide = view.findViewWithTag(DRAW_AREA_TAG);
Log.d("event", "culoide is: "+culoide.getWidth()); //always 0
}
Je figure que onViewCreated devrait être le bon endroit pour en obtenir, mais bien ce qui se passe. J'ai essayé avant super.onViewCreated, en debug il ressemble 'findViewWithTag' trouve la vue de droite, essayé avec l'api 7 v4.
Toute aide?
OriginalL'auteur quinestor | 2013-06-04
Vous devez vous connecter pour publier un commentaire.
Vous devez attendre la fin de la première mesure et la mise en page afin d'obtenir des valeurs non nulles pour
getWidth()
etgetHeight()
. Vous pouvez le faire avec unViewTreeObserver.OnGlobalLayouListener
La méthode dépréciée des appels par le biais de la nouvelle (et en fait, je ne sais pas si c'était la peine d'autodérision juste à cause du nom), mais j'ai édité mon code, de toute façon.
Ou tout simplement remplacer
onSizeChanged()
.Dans mon cas, je veux utiliser le getWidth() pour régler certains padding/margin. Je ne peux pas remplacer onSizeChanged (), puisqu'il est appelé lors de la présentation et des changements de remplissage/de la marge ne serait pas persisté. Le OnGlobalLayoutListener déclenche lors de la mise en page est terminée, pas de problèmes là-bas.
N'oubliez pas de régler mView=null en onDestroyView().
OriginalL'auteur Karakuri
Ma méthode préférée consiste à ajouter une
OnLayoutChangeListener
à la vue que vous souhaitez suivre lui-mêmeVous pouvez supprimer l'auditeur dans le rappel si vous voulez seulement la mise en page initiale.
OriginalL'auteur Zeophlite
Essayez d'appeler
culoide.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
premier, puis essayez de
getWidth()
etgetHeight()
OriginalL'auteur Ken Wolf
Vous devez attendre jusqu'à ce que le onSizeChanged() méthode est appelée avant que vous pouvez déterminer de manière fiable la taille de la Vue.
OriginalL'auteur Kerry
Essayer de vérifier dans onWindowFocusChanged et il devrait avoir des valeurs valides:
J'ai eu un problème similaire où j'avais besoin d'obtenir la largeur et la hauteur du widget et c'était de la fonction dans laquelle j'ai pu garantir le widget signalé, il est d'une taille correcte.
OriginalL'auteur spartygw