27 votes

Quelle est la différence entre getWidth / heigth () et getMeasuredWidth / Heigth () dans le SDK Android?

Le Android Documentation dit qu'il y a deux tailles de vue, les dimensions mesurées et les dimensions de dessin. La mesure obtenue est celui calculé dans la mesure passer (le onMeasure méthode), tandis que le dessin dimensions sont de la taille réelle sur l'écran. En particulier, la documentation dit que:

Ces valeurs peuvent, mais ne doivent pas, être différente de la largeur et de la hauteur.

Donc, ma question est: que peut faire le dessin dimension différente de la mesure de la dimension? Si le onMeasure(int,int) méthode respecte les spécifications de mise en page (étant donné que les paramètres widthMeasureSpec et heightMeasureSpec, comment pourrait-on le SDK décide que la vue doit avoir un autre dessin de la taille?

En outre, comment/où dans le Code Source Android à la largeur/hauteur est utilisée pour calculer le dessin largeur/hauteur? J'ai essayé de regarder dans la Vue de code source, mais je ne peux pas comprendre comment le measuredwidth dans/Hauteur est utilisée pour calculer la finale de la largeur/hauteur. Peut-être qu'il a quelque chose à voir avec le rembourrage, mais je ne suis pas sûr.

47voto

Prakash Nadar Points 874

Comme le nom le suggère le measuredwidth dans/hauteur est utilisé lors de la mesure, et layoutting phase.

Laissez-moi vous donner un exemple,

Un widget est demandé à la mesure elle-même, Le widget dit qu'il veut être 200px par 200px. C'est measuredwidth dans/hauteur.

Pendant la mise en phase, c'est à dire dans onLayout méthode. La méthode peut utiliser le measuredwidth dans/hauteur de ses enfants ou de céder une nouvelle largeur/largeur en appelant la méthode de présentation de la vue.

disons que le onLayout les appels de méthode childview.mise en page(0,0,150,150) maintenant la largeur/hauteur de la vue est différente de la largeur/hauteur.

Je suggère de ne pas utiliser le measuredwidth dans/hauteur hors onLayout méthode.

pour résumer .

  1. onMeasure -> configure measuredwidth dans/hauteur
  2. onLayout -> définit la largeur/hauteur du widget.

additionallly
public void View.layout(int l, int t, int r, int b)
semble être l'endroit où l'affectation de la position et de la taille qui se passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X