web-dev-qa-db-fra.com

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

La documentation Android dit qu'il y a deux tailles pour une vue, les dimensions mesurées et les dimensions du dessin . La dimension mesurée est celle calculée dans le passage de mesure (la méthode onMeasure ), tandis que la les dimensions du dessin sont la taille réelle à l'écran. En particulier, la documentation indique 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: qu'est-ce qui pourrait faire que la dimension du dessin soit différente de la dimension mesurée? Si la méthode onMeasure (int, int) respecte les exigences de disposition (données comme paramètres widthMeasureSpec et heightMeasureSpec , comment le SDK pourrait-il décider que la vue devrait avoir une taille de dessin différente?

De plus, comment/où dans le Code source Android la largeur/hauteur mesurée est-elle utilisée pour calculer la largeur/hauteur du dessin? J'ai essayé de regarder dans le Afficher le code source , mais je ne peux pas comprendre comment la largeur/hauteur mesurée 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.

76
lgfischer

Comme son nom l'indique, la largeur/hauteur mesurée est utilisée pendant la phase de mesure et d'agencement.

Laissez-moi vous donner un exemple,

Un widget est invité à se mesurer lui-même, le widget dit 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 largeur/hauteur mesurée de ses enfants ou affecter une nouvelle largeur/hauteur en appelant la méthode de disposition 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 mesuréeWidth/height en dehors de onLayout.

résumer .

  1. onMeasure -> configure la largeur mesurée/la hauteur mesurée
  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 le lieu où se fait l'attribution de la position et de la taille.

85
Prakash Nadar