L'activité du cycle de vie de la réception de l'avis que la mise en page est terminée
J'ai une activité dans laquelle j'ai 3 boutons placés les uns à côté des autres. J'ai utilisé une sous-classe de Bouton qui permettra de redimensionner le texte du bouton pour éviter que le texte à partir de l'emballage. Je voudrais que les 3 boutons pour partager la même taille de texte. Pour ce faire, j'ai l'intention de détecter le bouton avec la plus petite taille du texte et de définir les 2 autres boutons pour que la taille du texte.
Le problème que j'ai est de savoir quand l'Activité a terminé la pose de ses composantes, de sorte que je peux savoir de manière fiable que le redimensionnement du texte a eu lieu. À partir de l'Android à la documentation, il semblerait que la dernière notification dans le cycle de vie est onResume (), mais il semble que la mise en page n'est pas terminé à ce stade. Est-il un moyen de réception de la notification que l'Activité de mise en page a fini?
- Je n'ai pas la moindre idée, mais peut-être que vous pouvez le faire manuellement - garder le contrôle de composants pour voir si elles sont null ou si la taille du texte a changé ou quelque chose; la figure d'un des critères qui teste si c'est prêt.
- Je pense vraiment que vous avoir à y penser cela... aussi longtemps que vous manipulez votre
View
s aprèssetContentView
a été appelé, vous devriez être OK.
Vous devez vous connecter pour publier un commentaire.
J'ai fait quelque chose de semblable à l'aide de l'Arbre des Observateurs. Vous pourriez avoir à jouer avec elle un peu de retrouver la vue(s) il doit être attaché trop, mais ce sera le feu une fois que la vue est réglé. À partir de là, vous pouvez obtenir la taille du texte, et de faire toutes les modifications nécessaires.
EDIT:
La méthode #removeGlobalOnLayoutListener a été abandonné, mais il est toujours valide. Pour utiliser à la fois l'ancienne et la nouvelle méthode, voir cette stackoverflow répondre.
MapView
ou unMapFragment
? Je suis en train de faire la même chose que ce que vous avez fait, mais je ne sais pas comment je peux obtenir la même chose pour unMapFragment
. Il n'a pas la méthodegetViewTreeObserver
...De ce que je sais il n'est pas un événement ou quelque chose qui vous dit que tout est chargé. Ce que vous peut-être pouvez faire est à la fin de la méthode oncreate de commencer une AsyncTask qui s'exécute pendant que la largeur de votre dernier point de vue est de 0. Lors de la mise en page est chargée, des points de vue ont en réalité une taille au lieu de 0 de sorte que vous savez son chargement. Dans le rappel de l'ASyncTask ensuite, vous pouvez calculer le plus petit bouton et de déterminer la taille de la police.
La
Activity
du cycle de vie des méthodes de rappel et sa fenêtre de mise en page ne sont pas intrinsèquement liés. Cependant, vous avez la garantie que leButton
s existent aussi longtemps que vous pouvez manipuler après avoir appelésetContentView
.Peut-être vous pouvez définir un OnLayoutChangeListener sur vos boutons (ou le viewgroup contenant les boutons) et de faire la police de re-dimensionnement de là? Je ne suis pas sûr si cela est appelé avant ou après la mise en page des modifications ont pris effet...
OnLayoutChangeListener
est appelé à chaque fois que la mise en page est jamais changé. Donc, si vous faites affaire avec un contenu dynamique, je ne le recommande pas..Vous pouvez essayer primordial De l'activité.onWindowFocusChanged(boolean) fiable pour recevoir une notification lorsque l'activité est devenue visible. Vous pouvez alors supposer que la mise en page est terminée. Un problème que vous pourriez avoir avec cette approche est que l'Activité sera visible pour l'utilisateur et donc si le texte du bouton de redimensionnement de la modification de la taille sera brièvement visible pour l'utilisateur.
Android va faire la mise en page dans deux étapes, la mesure et la mise en page. Parce que vous voulez juste à la taille du bouton, vous pouvez utiliser getMeasuredWidth au lieu de getWidth, comme cela va être disponible plus tôt.
Je vous recommande d'utiliser un LinearLayout au lieu de le faire manuellement en essayant de définir la largeur des boutons. Assurez-vous que android:weightSum est spécifié, surtout si vous allez pour un non largeur totale de mise en page.
Afin de savoir quand une vue de la mise en page est terminée, peut-être que je voudrais lui donner un exécutable dans le onCreate() la méthode de mon activité et de l'appel de cette praticable de Vue.onSizeChanged().
Il devrait ressembler à
et puis effectuez les opérations suivantes dans votre point de vue.
Espère que cette aide.
Je dessine des images dynamiquement, et voulaient mettre sur les tailles de ImageViews par LinearLayout et ensuite utiliser ces tailles. Donc j'ai besoin de créer les images après sa mise en page est terminée.
J'ai utilisé de la Vue.de poste( Runnable ) à la fin de onCreate, puis créé les images dans l'Exécutable. J'ai testé un peu, et a constaté que onStart, onResume et onPostResume eu lieu avant la mise en page (ImageView largeur était de 0). Posté le Praticable a été exécutée d'après eux tous, et après sa mise en page, parce que la largeur avait été fixée.
La posté Praticable sans doute obtient posté dans le thread de l'INTERFACE utilisateur après la procédure de démarrage. Le ImageViews demande les mises en page, et les demandes sont validées après le Praticable. Juste au cas où, je vérifie que la largeur a été définie et reposter le Praticable si il n'a pas. Une fois l'initialisation terminée, l'Exécutable n'est pas affiché à nouveau.
Lorsque je tente de faire à l'horizontale empilé les boutons, je viens de leur donner la layout_width de wrap_parent toutefois leur donner la layout_weight de 1.
De cette façon, ils ont tous essayer d'occuper tout l'espace disponible également distribués par la société mère de mise en page.
Un exemple de code serait quelque chose comme cela et j'espère que cela aide:
-serkan
Vous pouvez utiliser
iswindow()
. Annuler-il. Il sera appelé juste avant deonPause()
.Que par l'Activité du cycle de Vie, Une mise en page est considérée comme complète lorsque
onResume()
est appelée. C'est lorsque l'utilisateur est présenté avec l'écran. De sorte que vous pouvez aveuglément faire des trucs avec des boutons à partir de cette fonction.