2011-03-21 3 views
4

Je sais que faire des calculs de taille de vue pour le placement est froncé. Les gestionnaires de disposition Android doivent placer correctement toutes les vues. Cependant, il existe des cas légitimes où une sorte de calculs doit être effectuée pour fournir des indications (par exemple, le nombre de colonnes dans un GridView ou le dimensionnement d'une vue de texte pour autoriser un nombre minimum de caractères affichés dans une ligne). Pour ces cas, je voudrais obtenir la vue pertinente largeur/hauteur info ou largeur de la police/hauteur/etc. Cependant, les appels getWidth()/getHeigth()/etc ne renvoient jamais une valeur valide à moins que la vue n'ait été affichée mais qu'elle soit en retard. C'est une situation de catch-22. Je me demande s'il y a un moyen que je n'ai pas trouvé (l'api android est grand pour comprendre tout dans mon esprit) qui rend ce que j'ai décrit ci-dessus possible.Afficher la largeur/hauteur ou la largeur de la police/hauteur/autres tailles avant le premier affichage

Répondre

5

Ouais j'ai testé la suggestion et ça marche!

Exemple de code.

Display display = getWindowManager().getDefaultDisplay(); 
View s = findViewById(R.id.Screen); // Screen is a container layout 
s.measure(display.getWidth(), display.getHeight()); 
View c = findViewById(R.id.Cell0); 
Log.i(TAG, "cell width = " + String.valueOf(c.getMeasuredWidth()) 
    + " height = " + String.valueOf(c.getMeasuredHeight())); 

Ce que je ne comprends pas, c'est comment j'ai raté ça! :) Je savais tout sur le processus de mesure, mais je suis resté coincé dans son utilisation dans les vues personnalisées ...

+0

D'où vient le 'display'? –

Questions connexes