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

La documentation Android indique qu’il existe deux tailles pour une vue, les dimensions mesurées et les dimensions du dessin . La dimension mesurée est celle calculée dans la mesure (méthode onMeasure ), tandis que les dimensions du dessin correspondent à la taille réelle à l’écran. En particulier, la documentation dit que:

Ces valeurs peuvent, mais ne doivent pas nécessairement, être différentes de la largeur et de la hauteur mesurées.

Donc, ma question est la suivante: qu’est-ce qui pourrait rendre la dimension du dessin différente de la dimension mesurée? Si la méthode onMeasure (int, int) respecte les exigences de mise en page (données comme parameters widthMeasureSpec et heightMeasureSpec , comment le SDK peut-il décider que la vue doit avoir une taille de dessin différente?

De plus, comment / où dans le code source Android la largeur / hauteur mesurée est utilisée pour calculer la largeur / hauteur du dessin? J’ai essayé de regarder le code source de View , mais je n’arrive pas à comprendre comment la measureWidth / Height est utilisée pour calculer la largeur / hauteur finale. Peut-être que cela a quelque chose à voir avec le rembourrage, mais je ne suis pas sûr.

Comme son nom l’indique, la largeur / hauteur mesurée est utilisée pendant la phase de mesure et de mise en page.

Laissez-moi vous donner un exemple,

Un widget est invité à se mesurer, le widget indique qu’il veut être 200px par 200px. Ceci est mesuré Largeur / hauteur.

Pendant la phase de mise en page, c’est-à-dire dans la méthode onLayout. La méthode peut utiliser la width / height mesurée de ses enfants ou assigner une nouvelle largeur / hauteur en appelant la méthode de présentation de la vue.

Disons que la méthode onLayout appelle childview.layout (0,0,150,150) maintenant la largeur / hauteur de la vue est différente de la largeur / hauteur mesurée.

Je suggérerais de ne pas utiliser la méthode measuredWidth / height hors onLayout.

résumer .

  1. onMeasure -> met en place maximales / mesurées
  2. onLayout -> définit la largeur / hauteur du widget.

en plus
public void View.layout(int l, int t, int r, int b)
semble être l’endroit où l’atsortingbution de la position et de la taille se produit.