Si vous souhaitez obtenir la largeur et la hauteur avant que votre activité a ajouté ça à son point de vue de la hiérarchie, mesuré et mis hors vous aurez à composer measure()
sur le View
vous-même avant d'appeler getMeasuredWidth()
ou getMeasuredHeight()
.
Comme la largeur et la hauteur sont définies après la mesure a été appelé (qui à son tour appelle onMeasure()
) ils seront de retour à 0 avant de ce point. Vous aurez à fournir MeasureSpec
s pour measure(..)
qui variera en fonction de vos besoins.
Le MeasureSpecs qui permettent aux enfants d'imposer des contraintes elles-mêmes ressemblent à des
int widthMeasureSpec = MeasureSpec.makeMeasureSpec(*some width*, MeasureSpec.EXACTLY);
int heightMeasureSpec = MeasureSpec.makeMeasureSpec(*some height*, MeasureSpec.EXACTLY);
Point Important. La largeur passé en ci-dessus peut être soit explicite px ou ViewGroup.LayoutParams.WRAP_CONTENT
ou ViewGroup.LayoutParams.FILL_PARENT.
Il est aussi intéressant de noter que lorsque votre vision est mesurée dans la destination réelle de la hiérarchie de la MeasureSpec qui sera transmis à l' measure()
sera configuré basé sur le contenant ViewGroups
la logique de présentation. Il peut être appelé plus d'une fois si la première mesure de vals ne sont pas valides lorsqu'ils sont considérés dans le contexte de cette viewGroup parent / sa propre mise en page constraits / les contraintes de toute la fratrie de l'enfant-vues. Sans attendre l' viewGroup
d'appel measure()
avant la mise en œuvre de toute logique dépend de la taille mesurée, il serait dur (selon la situation) pour obtenir la valeur finale measuredWidth & height
de la solution ci-dessus, mais dans tous les cas, j'ai utilisé la technique ci-dessus, il a fit l'objet, mais ils ont été relativement simple. Si vous avez vraiment besoin de mesurer dans le contexte, vous devriez probablement juste après l' onLayout()
a retourné et explicitement toute modification puis requestLayout()
de nouveau.