2011-01-17 7 views
2

Wie kann ich benachrichtigt werden, wenn ein Layout-Pass beendet ist? Gibt es etwas wie onLayoutFinished(), das ich irgendwo implementieren oder überschreiben kann?Listen für Layoutänderungen in Android

Vom View javadoc:

Layout ist ein zwei Pass-Prozess: ein Maßübergabe und ein Layout-Pass. Der Messdurchlauf ist in measure (int, int) implementiert und ist eine Top-down-Traversierung des Ansichtsbaums. Jede Ansicht verschiebt Dimensionsspezifikationen den Baum während der Rekursion. Am Ende des Messdurchgangs hat jede Ansicht ihre Messungen gespeichert. Der zweite Durchlauf passiert im Layout (int, int, int, int) und ist auch von oben nach unten. Während dieses Durchlaufs ist jeder Elternteil verantwortlich für die Positionierung aller seiner Kinder unter Verwendung der Größen in der Maßnahme bestanden berechnet.

Ich möchte einige Logik ausführen, nachdem der "zweite Durchgang" beendet ist. Insbesondere möchte ich einige Änderungen an einer Ansicht vornehmen und dann Änderungen an einer anderen Ansicht vornehmen, die vom Rahmen (Position und Größe) der ersten Ansicht abhängen.

Antwort

3

Sie können onLayout() einfach überschreiben und tun, was Sie nach dem Aufruf von super.onLayout() tun müssen. Sie können auch onSizeChanged() überschreiben, das nur aufgerufen wird, wenn ein Layout-Durchlauf die Koordinaten/Größe einer Ansicht ändert.

+0

Ich versuchte onLayout() überschreiben, aber die Dinge haben sich nicht wie erwartet verhalten. Da es sich so anfühlte, als würde ich gegen die Art und Weise kämpfen, wie die Plattform die Dinge erledigt, entschied ich mich schließlich, die Ergebnisse des Layout-Durchlaufs auf der ersten Ansicht zu berechnen und auf dieser Grundlage Änderungen am Layout der zweiten Ansicht anzufordern. Die Ansichten werden dann zusammen während des gleichen Layout-Durchlaufs geändert. – hpique

Verwandte Themen