Holen Sie sich die Tatsächliche Höhe der Ansicht
Einfache Frage, vielleicht frustrierend-Komplex-aber-hoffentlich-einfache Antwort?
Was ist "Best Practice" für immer die tatsächliche Höhe der ein-element, dessen Größe FILL_PARENT?
Dies ist wahrscheinlich ein Duplikat dieser Frage ALSO: stackoverflow.com/questions/2864331/...
Danke - mein such-fu hat bereits Links für den Urlaub. Ich werde versuchen, die Antwort unter den ersten, aber es ist gut, Optionen.
Danke - mein such-fu hat bereits Links für den Urlaub. Ich werde versuchen, die Antwort unter den ersten, aber es ist gut, Optionen.
InformationsquelleAutor Wonko the Sane | 2010-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist definitiv komplizierter, als es scheint, dass es sein sollte. Ein einfacher Weg, die ich gefunden habe, im Vergleich zu der Antwort in der Frage vorgeschlagen, ist die Verwendung eines ViewTreeObserver. In Ihrer onCreate () - Methode verwenden, können Sie code wie den folgenden:
Könnten Sie genauer erklären, was du damit meinst? Ich weiß nicht genau verstehen. Wäre es nicht nur aufgerufen werden, während der onCreate () - oder onResume() ein einziges mal?
(Sorry für die Verspätung - Weihnachten Pause) Keine - erstellen Sie einen event-handler, so wird es genannt, jederzeit die layout-änderungen. Wenn Sie nicht über ein flag, das sagt, "ich habe meine notwendigen layout-änderungen" ruft es wieder, wenn Sie Ihre ändern, und wieder nach, dass die änderung vorgenommen wird, und...
So würden Sie nur am Ende in eine Schleife, wenn Sie tatsächlich etwas verändert im layout dann? So könnten Sie onGlobalLayout ändern andere variable, dann entfernen Sie einfach die OnGlobalLayoutListener danach? (Interessante Anmerkung: in der ViewTreeObserver Dokumentation, die Methode zu entfernen zu sein scheint irrtümlich benannt removeGlobalOnLayoutListener statt removeOnGlobalLayoutListener.)
Oh, warten Sie, ich erkannte Sie wahrscheinlich schrieb die bevor API 16. Auch jetzt beide Methoden existieren! Ich denke, Sie bemerkt die Diskrepanz zwischen dem API und der Dokumentation und beschlossen, die API war falsch!
InformationsquelleAutor kcoppock
Nur eine zusätzliche Ergänzung zu der obigen Antwort, wenn Sie brauchen, um alle Vorgänge zu Abmessungen mehrerer Bauteile in einer Sicht. Das layout listener wird aufgerufen für jede Ansicht, die die Gestaltung abgeschlossen ist. Dies ist rekursiv wahr, bis zu den root-view-Komponente (d.h. Kind-Elemente erzeugen layout-Ereignisse, dann das Eltern-element erzeugt ein layout-Ereignis). Was dies bedeutet ist, dass man einfach die Haken auf der root-view-Komponente das layout-Ereignis benachrichtigt zu werden, wenn jede Ansicht layout-änderungen.
Jetzt können Sie erwarten, dass alle Ihre Ansichten haben werden Breite und Höhe Werte in onGlobalLayout, weil Sie alle haben durchgeführt, Ihr layout. Dies ist natürlich vorzuziehen, um die Schaffung von vielen Hörern für jede Ansicht muss setzen Ihren tatsächlichen Abmessungen (es sei denn natürlich müssen Sie absolut haben Raum für die Ansicht, die das Ereignis generiert, das in der Regel nicht erforderlich).
InformationsquelleAutor pjs