Ich füge dynamisch Ansichten zu einem relativen Layout (sagen wir Container) in einer for-Schleife hinzu. Es gibt etwas Seltsames, das ich bemerke.
Beim Hinzufügen von Zeilen untereinander in einem relativen Layout in einer for-Schleife sieht das erste Mal vor, dass sich einige der Ansichten überlappen. Aber wenn ich den Bildschirm sperre und entsperre, kann ich sehen, dass die Ansichten korrekt platziert sind.
Sollte ich etwas bemerken, wenn ich Ansichten dynamisch zu einem relativen Layout hinzufüge?
Bearbeiten
Ich habe eine Lösung gefunden, wie ich das loswerden kann (bitte überprüfe meine Antwort). Aber ich wäre mehr als froh, eine Antwort zu akzeptieren, die dieses Problem analysiert und mir sagt, warum das passiert
Ich habe den Code vereinfacht und die Kommentare sollten eine gute Vorstellung davon geben, was ich mache.
Dies liegt daran, dass Sie RelativeLayout
mit height
als WRAP_CONTENT
haben und das Hinzufügen einer Ansicht den gesamten Container zu diesem Zeitpunkt nicht aktualisiert. Wenn Sie also geantwortet haben, können Sie eine hinzufügen Linie zu measure
die Dimensionen explizit oder invalidate
die Ansicht, um es vollständig neu zu erstellen.
In jedem Fall wäre LinearLayout
besser zu wählen, da es automatisch die Kinder in horizontal
oder vertical
Weise anordnet und Sie können die neue Ansicht sogar an einer anderen Stelle als der letzten Position hinzufügen automatisch aktualisiert werden.
Ich habe mich vor einem Jahr gegen gängige Probleme gewehrt, als ich an einer Bibliothek arbeitete, um dynamisch Layouts aus XML-Dateien zu erstellen (wie Android dies nicht unterstützt). Wenn Sie also einem RelativeLayout
dynamisch Ansichten hinzufügen, müssen Sie einige Dinge beachten:
View
(in diesem Fall RelativeLayout
) Excpetion
ausgelöst wird, wenn die relative View
fehlt (wurde dem Container zuvor nicht hinzugefügt). Dies ist ein Beispielcode aus dem Projekt, mit dem ich gearbeitet habe. Beachten Sie, dass es sich nur um ein einzelnes Teil handelt, das Verweise auf Klassen enthält, die nicht in der Android-API definiert sind. Ich bin mir sicher, dass es Ihnen die Grundidee gibt, RelativeLayot
dynamisch zu erstellen:
Fügen Sie Ihre Ansichten im vertikalen linearen Layout hinzu. Der folgende Link könnte Ihnen helfen
Füllen Sie Ihr Layout in einer for-Schleife auf.
Ich habe noch nicht die Antwort gefunden, warum das passiert. Aber ich habe eine Lösung gefunden. Rufen Sie nach dem Hinzufügen jeder Zeile in der Schleife container.measure(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
auf
Dies scheint das Problem zu lösen. Aber ich denke wirklich, dass container.addView()
auch measure()
aufrufen sollte.
Tags und Links android