2017-05-20 3 views
16

Kennt jemand neue Funktionen im Constraint-Layout 1.1, nämlich Barrieren und prozentuale Dimensionen? Es gibt absolut keine Dokumentation online verfügbar, und die jüngsten Google I/O sprechen über Designer-Tools nur im Detail Platzhalter. Übrigens, ich habe herausgefunden, wie man Gruppen benutzt, die auch ein neues Feature sind. Sie müssen einfachWie können neue Features im Constraint-Layout 1.1 verwendet werden?

<android.support.constraint.Group 
    app:constraint_referenced_ids="button1, button2" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

zu Ihrem Constraint Layout hinzufügen, wo App: constraint_referenced_ids eine Zeichenfolge ist, wo Sie durch Komma getrennte IDs von Ansichten aufzählen sollen, dass Sie mit dieser Gruppe verbunden werden sollen. Wenn Sie nun die Sichtbarkeit einer Gruppe ändern, ändert sich die Sichtbarkeit aller Ansichten, auf die sie verweist. Dies ist meiner Meinung nach der Hauptzweck dieser Funktion.

+2

Es ist eine Abkürzung für für ausgewählte Ansichten erstellen Gruppe. Es wird automatisch alle IDs in der Art enthalten, die sie enthalten sollen. Du solltest es versuchen. Auch für Prozentsätze gibt es 3 neue Attribute (tippen Sie einfach "app: per" und schauen Sie sich Android Studio Hinweise an). – Ekalips

+0

Danke! Ich werde das überprüfen. – Roman

Antwort

22

Documentation über die neuen Funktionen war sehr selten, wenn diese Frage zuerst gestellt wurde. Das Beste, was ich finden konnte, war in this Reddit post! Aber die Information dort gab mir genügend Hinweise, um ein Beschränkungslayout mit einer horizontalen Barriere darin zu erstellen. Es funktionierte tatsächlich, und das neue (Beta) Constraint-Layout behob auch einige schlechte Probleme mit wrap_content. Mein sehr positiver erster Eindruck der Constraint Layout Beta hat sich unter vielen zusätzlichen Tests gehalten.

Constraint-Layout Beta 3 führte ein aufregendes neues Feature ein: Kreisförmige Positionierung von Widgets unter Verwendung eines Beschränkungskreises und eines Winkelparameters. Constraint Layout Beta 4 bietet ein paar zusätzliche Korrekturen, und es gibt sogar some official documentation verfügbar!

Bevor Sie das neue Material verwenden, fügen Sie dem Projekt das Beta-Constraint-Layout hinzu.

In app/build.gradle, die Abhängigkeit Constraint-Layout dies ändern:

compile 'com.android.support.constraint:constraint-layout:1.1.0-beta5'

Möglicherweise müssen Sie auch die Maven-Repository build.gradle zu Projekt hinzufügen (was eine andere Datei im Stammverzeichnis Ihres Projekts). Achten Sie auf die allprojects Repositories Abschnitt und fügen Sie diese: maven { url 'https://maven.google.com' } So ist der ganze Abschnitt wie folgt aussehen sollte:

allprojects { 
    repositories { 
     jcenter() 
     maven { url 'https://maven.google.com' } 
    } 
} 

Jetzt zum spaßigen Teil! Das folgende Codefragment erstellt eine horizontale Barriere, so dass bottom_textview unter included_layout und multiline_textview liegt.

<android.support.constraint.Barrier 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/barrier1" 
    app:barrierDirection="bottom" 
    app:constraint_referenced_ids="included_layout, multiline_textview" /> 

<TextView 
    android:id="@+id/bottom_textview" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toRightOf="parent" 
    app:layout_constraintTop_toBottomOf="@+id/barrier1" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" /> 

Erster Eindruck: Barrieren sind großartig! Mein neues Layout ist flacher und einfacher und scheint genau das zu tun, was ich möchte. Es ist definitiv einen Versuch wert.

Weitere ausführliche Dokumentation wird allmählich zur Verfügung:

@Vyacheslav A ‚s Antwort hat auch eine große Zusammenfassung dessen, was die neuen Features tun.

+0

Danke für die Info! – Roman

+0

Vielen Dank, dass Sie diesen Beitrag aktualisiert haben! – Piotr99

+0

Brauchen wir wirklich diese Zeilen, in Beispiel die 'App sehen werden können: layout_constraintLeft_toLeftOf = "Eltern"' 'App: layout_constraintRight_toRightOf = "Eltern"' 'App: layout_constraintTop_toBottomOf = "@ + id/multiline_textview"' – Lemberg

2

Es gibt einige Informationen zu Barrier here.

+4

Ein Link zu einer möglichen Lösung ist immer willkommen, aber bitte fügen Sie Kontext um den Link hinzu, damit Ihre Mitbenutzer eine Idee haben, was es ist und warum es da ist. Zitiere immer den relevantesten Teil eines wichtigen Links, falls die Zielseite nicht erreichbar ist oder permanent offline geschaltet wird. Werfen Sie einen Blick auf [Warum und wie werden einige Antworten gelöscht?] (Https://stackoverflow.com/help/deleted-answers) und [Wie schreibe ich eine gute Antwort?] (Https://stackoverflow.com/help/wie man antwortet) – Gary99

13

1. Percent Abmessungen

Das Standardverhalten der Widgets der Breite 0DP (oder match_constraint) (konfigurierbar durch die layout_constraintWidth_default Eigenschaft) verteilt wird. In ConstraintLayout 1.0.x hatten wir die Wahl, es in den Zeilenumbruch zu ändern, und in 1.1.x haben wir einen neuen Wert, Prozent, mit dem wir ein Widget so einstellen können, dass es einen bestimmten Prozentsatz des verfügbaren Platzes einnimmt.

<!-- the widget will take 40% of the available space --> 
    app:layout_constraintWidth_default="percent" 
    app:layout_constraintWidth_percent="0.4" 

2. Barrieren

Von diesem neuen Widget, haben wir einige Beispiele von ConstraintLayout.com. Barrieren verhindern, dass ein oder mehrere Widgets die Barriere umgehen. Wenn dies geschieht, bewegt sich die Barriere selbst und vermeidet, dass das/die Widget (s) darüber platziert werden. Im folgenden Beispiel kann die Endeigenschaft von text1 und text2 die Barriere nicht umgehen. Wenn dies auftritt, bewegt sich die Barriere selbst nach rechts (oder nach links, wenn in einem RTL-Layout). Dies ist insbesondere bei verschiedenen Widget-Größen, abhängig von einer Konfiguration oder Internationalisierung, eine Handvoll.

<android.support.constraint.ConstraintLayout...> 
    <TextView 
    android:id=”@+id/text1" ... /> 
    <TextView 
    android:id=”@+id/text2" ... /> 
    <android.support.constraint.Barrier 
    android:id=”@+id/barrier” 
    android:layout_width=”wrap_content” 
    android:layout_height=”wrap_content” 
    app:barrierDirection=”end” <!-- start, top, bottom, right... --> 
    app:constraint_referenced_ids=”text1,text2" /> 
    <TextView 
    android:id=”@+id/text3" 
    ... 
    app:layout_constraintStart_toEndOf=”@+id/barrier” /> 
</android.support.constraint.ConstraintLayout> 

3. Gruppe

Gruppen, wie die Richtlinien, sind Widgets mit Größe 0. Aber Group hilft eine Aktion auf eine Reihe von Widgets anzuwenden. Der häufigste Fall besteht darin, die Sichtbarkeit einer Sammlung von Widgets zu steuern. Bei diesem Szenario bestand die gängigste Lösung darin, sich eine Liste oder einen Satz von Ansichten innerhalb der Aktivität oder des Fragments anzulegen oder sogar eine ViewGroup hinzuzufügen und alle Ansichten darin einzufügen, um die Sichtbarkeit des Containers zu steuern. Jetzt müssen Sie nur ihre IDs zur Gruppe hinzufügen, und die Gruppe wird die Aktionen an alle verbundenen Ansichten weitergeben.

<android.support.constraint.ConstraintLayout ...> 
    <TextView 
    android:id=”@+id/text1" ... /> 
    <TextView 
    android:id=”@+id/text2" ... /> 
    <android.support.constraint.Group 
    android:id=”@+id/group” 
    ... 
    app:constraint_referenced_ids=”text1,text2" /> 
</android.support.constraint.ConstraintLayout> 

In diesem Fall, wenn wir

group.setVisibility(View.GONE); 

rufen dann text1 und text2 die Sichtbarkeit GONE erhalten.

Original text here.

Offizielle Dokumente mit description here.

Verwandte Themen