So fügen Sie ein Beschränkungslayout in ein anderes Beschränkungslayout ein und legen eine Beschränkung zwischen jedem fest
Lesezeit: 9 Minuten
Kelian
Ich verwende ConstraintLyout v 1.0.1.
Ich möchte in meine XML-Datei ein untergeordnetes ConstraintLayout einfügen, das einem Teil meines globalen Layouts entspricht (das selbst ein ConstraintLayout ist). Ich habe das Layout in zwei XML-Dateien aufgeteilt, um diesen Teil an anderer Stelle zu verwenden
Ich habe dies versucht, aber ich habe keine Kontrolle darüber, wo ich mein untergeordnetes Constraint-Layout im übergeordneten Element platzieren soll. Ich frage mich, ob ich alles in derselben XML-Datei platzieren muss oder ob es eine Lösung gibt, separate Dateien zu verwenden.
Sie können die Einschränkungsparameter zum Root-Tag des enthaltenen Layouts hinzufügen.
– opLW
22. April 2021 um 2:05 Uhr
Kelian
Habe tatsächlich eine Lösung gefunden. Android Studio vervollständigt nicht automatisch ConstraintLayout-Parameter in einem Include-Tag, aber sie wirken sich darauf aus, solange Sie dem Include eine Größe zuweisen.
Glaubst du nicht, dass es den Zweck der Erstellung einer Benutzeroberfläche ohne verschachtelte Layouts zunichte macht, wenn wir das Constraint-Layout in ein anderes Constraint-Layout einfügen?
– Nouman Bhatti
20. März 2018 um 9:49 Uhr
@NoumanBhatti Sie können sich irren. ConstraintLayout reduziert verschachtelte Layouts und erstellt nicht alle Layouts ohne verschachtelte Layouts. Include ist am Wiederverwenden von Layouts interessiert, und das kann ConstraintLayout nicht. Wenn das Einfügen eines Include Ihr Layout flexibler machen kann, können Sie dies bedenkenlos tun.
– Allen Vork
18. April 2018 um 7:18 Uhr
Für alle anderen, die hinter mir kommen, wenn dies nicht funktioniert, könnte es daran liegen, dass Sie Ihre Includes in a verschachtelt haben <merge /> Schild. Als ich das entfernte und das Constraint-Layout dem übergeordneten Layout überließ, konnte ich die Positionierung und die Größe anpassen
– Hallenmeister
7. August 2018 um 10:24 Uhr
Auch für mein Setup konnte ich wrap_content nicht für die Höhe verwenden, ich musste ihm einen expliziten dp-Wert geben.
– Hallenmeister
7. August 2018 um 10:41 Uhr
Diese Lösung funktionierte auch für eine andere Situation. Es scheint, dass Android Studio erwartet, wenn Sie eines der angeben app:layout_constraint* Parameter, die Sie auch angeben müssen android:layout_width und android:layout_height für die <include>
– Michael Osofsky
6. September 2019 um 18:01 Uhr
Um ein Beschränkungslayout einzufügen und es nach Bedarf einzuschränken, muss man dem eingeschlossenen Layout Breite und Höhe wie folgt geben:
@DhruvamSharma Wenn Sie die ID neu definieren, erhalten Sie diesen Fehler stackoverflow.com/questions/46045377/…
– Deepak Kumar
29. August 2019 um 8:37 Uhr
korrekte Antwort! Ich habe layout_width und layout_height hinzugefügt, constains gesetzt (oben und unten in meinem Fall) und es funktioniert.
– oxidiert
27. Oktober 2020 um 19:05 Uhr
Dies ist die richtige Antwort, Sie müssen dem enthaltenen Layout Höhe und Breite hinzufügen, müssen es nicht in ein anderes übergeordnetes Layout einschließen.
– Nezneika
13. Dezember 2020 um 8:00 Uhr
Das könntest du vermeiden ConstraintLayout Einschränkungen beim Include-Element. Ich habe gerade <include/> es wie es ist.
Würde die Verwendung eines Include nicht ein Beschränkungslayout innerhalb des übergeordneten Beschränkungslayouts erstellen? Dann ist es sinnvoll, die zu verwenden include da Sie nicht mehr die flache Ansichtshierarchie des Constraint-Layouts haben
– 11m0
8. März 2019 um 23:57 Uhr
Durch including einem anderen Layout können Sie die enthaltenen Layouts in anderen wiederverwenden activities.
– Wenig
9. März 2019 um 5:38 Uhr
Der Vorteil besteht also darin, eine bestimmte Layoutdatei wiederverwenden zu können, der Nachteil besteht jedoch darin, dass Sie durch potenziell verschachtelte Layouts Leistungseinbußen erleiden. Das stimmt?
– 11m0
10. März 2019 um 0:16 Uhr
Ja, du hast ein Leistungsproblem. Aber ich glaube, ich habe die Lösung für das ganze Problem gefunden. Die Lösung könnte sein parentTag wie hier beschrieben (android.jlelse.eu/android-dev-tip-5-55226527e780). Ich werde es testen, wenn ich Zeit habe, oder Sie können es testen und die Community wissen lassen.
– Wenig
11. März 2019 um 4:48 Uhr
Das parentTag in Tools ist nur für das, was Sie auf der Design-Registerkarte von Android Studio sehen, es hat keine Auswirkung zur Laufzeit
– Nikos Hidalgo
10. September 2019 um 14:38 Uhr
Um ein Beschränkungslayout in ein anderes Beschränkungslayout einzuschließen, um ein weiteres Beschränkungslayout für jedes übergeordnete Element des Einschlusslayouts zu verwenden … Wie unten:
Dies ist Arbeit an meinem XML-Layout. Genießen Sie Code.
Schiwam
Wir können a verwenden LayoutSchild bei Verwendung des Constraint-Layouts. Für lineares Layout können wir das Layout direkt einbeziehen.
Ich hatte eine andere Anforderung, bei der ich eine Registerkartenansicht unter der Symbolleiste habe. Ich hatte die Symbolleistenhöhe auf 0 dp eingestellt und eine Ansichtsdatei unterhalb der Registerkartenansicht hinzugefügt, sodass sowohl die Registerkartenansicht als auch die Symbolleiste als eine Einheit erscheinen.
Sie können die Einschränkungsparameter zum Root-Tag des enthaltenen Layouts hinzufügen.
– opLW
22. April 2021 um 2:05 Uhr