Android obtient la hauteur et la largeur de la mise en page dans un fragment
Je suis en train de travailler sur un fragment et je veux obtenir la dimension d'un layout
contenues dans le xml
fragment layout
.
Quand j'ai essayer le code
RelativeLayout myLayout = view.findViewById(R.id.myLayout);
myLayout.getHeight();
elle renvoie 0.
J'ai besoin de ces dimensions pour mettre à l'intérieur monmodèle d'autres objets.
J'essaie d'utiliser:
myLayout.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener(){
@Override
public void onGlobalLayout() {
mHeight = myLayout.getHeight();
mWidth= myLayout.getWidth();
System.out.println("width: "+mWidth+" height: "+mHeight);
}
});
mais ce code est invoquer un beaucoup de temps et je ne sais pas exactement quand il est execute.
J'ai besoin de ces dimensions dans public void onActivityCreated ()
méthode. Est-il possible?
source d'informationauteur lory105
Vous devez vous connecter pour publier un commentaire.
Il y a une solution plus propre pour cela, il suffit d'utiliser la Vue.méthode post() sur votre fragment de racine de vue, et vous pouvez les appeler getMeasuredHeight()/getMeasuredWidth() et obtenir les valeurs réelles.
E. g.
Très propre et bien rangé et pas salissant marinage sur les ViewTreeObserver.
J'ai uniquement testé avec android-23 les dispositifs, mais l'API a eu cette méthode depuis le niveau 1.
De toute façon, WFM.
La addOnGlobalLayoutListener sera appelée chaque fois que le petit changement de la vue qui s'est passé. Donc, vous devez supprimer ce listener de la vue.
Simple d'utilisation:
}
Je vous suggère de vérifier :
Dans
onActivityCreated
la vue n'a pas été mesurée encore.Donc non, vous ne pouvez pas obtenir les mesures à partir de là.
onGlobalLayout
est un bon endroit pour le faire. Les mises en arriver directement après la mesure.Vous pouvez supprimer votre auditeur par la suite, si vous ne voulez faire qu'une fois. Notez que les mises en page peuvent changer de taille (claviers virtuels apparaissant, par exemple)