Ich brauche Hilfe bei ConstraintSet
. Mein Ziel ist es, die Einschränkungen der Ansicht im Code zu ändern, aber ich kann nicht herausfinden, wie ich das richtig mache.
Ich habe 4 TextView
s und eins ImageView
. Ich muss ImageView
Einschränkungen für eines der TextView
s festlegen .
check_answer4 = (TextView) findViewById(R.id.check_answer4);
check_answer1 = (TextView) findViewById(R.id.check_answer1);
check_answer2 = (TextView) findViewById(R.id.check_answer2);
check_answer3 = (TextView) findViewById(R.id.check_answer3);
correct_answer_icon = (ImageView) findViewById(R.id.correct_answer_icon);
Wenn die erste Antwort richtig ist, muss ich Einschränkungen von ImageView
bis festlegen
app:layout_constraintRight_toRightOf="@+id/check_answer1"
app:layout_constraintTop_toTopOf="@+id/check_answer1"
Wenn die zweite Antwort richtig ist, muss ich Einschränkungen von ImageView
bis festlegen
app:layout_constraintRight_toRightOf="@+id/check_answer2"
app:layout_constraintTop_toTopOf="@+id/check_answer2"
Und so weiter.
android
android-layout
android-view
android-constraintlayout
Großer Trainer
quelle
quelle
Antworten:
So legen Sie Einschränkungen für die Bildansicht fest:
verwenden:
So legen Sie Einschränkungen für die Bildansicht fest:
verwenden:
quelle
.clone(constraintLayout)
was ist diese Variable und woher bekomme ich sie?ConstraintLayout constraintLayout = findViewById(R.id.parent_layout);
Angenommen, wir möchten die Einschränkungen zur Laufzeit ändern, sodass button1 beim Klicken auf button2 ausgerichtet wird:
Dann mit diesem Layout:
Wir können Folgendes tun:
quelle
layoutParams
undval
? Ist das überhaupt Java?ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) button1.getLayoutParams();
button1.requestLayout()
was dann die Instanz der vonLayoutParams
uns mutierten Instanz überprüft .requestLayout()
Anrufs durchsetLayoutParams()
und dann funktioniert es. DaslayoutParams
Layout einfach zu mutieren und anzufordern scheint nicht den Trick zu tun.In Kotlin können Sie einfach die
ConstraintSet
Klasse erweitern und einige Methoden hinzufügen, um dsl in Kotlin zu nutzen und einen besser lesbaren Code zu erstellen. So wasUnd benutze es so
quelle
Ich weiß, dass meine Antwort sehr spät ist, aber ich bin mir sicher, dass es anderen helfen würde, die hier viel vorbeischauen. Dieser Artikel gehört nicht mir, aber ich habe einige Änderungen vorgenommen. Abgesehen davon sollten Sie sich bemühen, den vollständigen Artikel hier zu lesen
Einschränkungssätze
Der Schlüssel zum Arbeiten mit Einschränkungssätzen in Java-Code ist die ConstraintSet-Klasse. Diese Klasse enthält eine Reihe von Methoden, mit denen Aufgaben wie das Erstellen, Konfigurieren und Anwenden von Einschränkungen auf eine ConstraintLayout-Instanz ausgeführt werden können. Darüber hinaus können die aktuellen Einschränkungen für eine ConstraintLayout-Instanz in ein ConstraintSet-Objekt kopiert und verwendet werden, um dieselben Einschränkungen auf andere Layouts anzuwenden (mit oder ohne Änderungen).
Eine ConstraintSet-Instanz wird wie jedes andere Java-Objekt erstellt:
Sobald ein Einschränkungssatz erstellt wurde, können Methoden für die Instanz aufgerufen werden, um eine Vielzahl von Aufgaben auszuführen. Der folgende Code konfiguriert einen Einschränkungssatz, bei dem die linke Seite einer Schaltflächenansicht mit der rechten Seite einer EditText-Ansicht mit einem Rand von 70 dp verbunden ist:
Anwenden von Einschränkungen auf ein Layout Sobald der Einschränkungssatz konfiguriert ist, muss er auf eine ConstraintLayout-Instanz angewendet werden, bevor er wirksam wird. Ein Einschränkungssatz wird über einen Aufruf der Methode applyTo () angewendet, wobei ein Verweis auf das Layoutobjekt übergeben wird, auf das die Einstellungen angewendet werden sollen:
Es gibt viel mehr Dinge, die Sie mit der
ConstraintSet
API tun können: Horizontale und vertikale Vorspannung einstellen, horizontal und vertikal zentrieren, Ketten manipulieren und vieles mehr.Wirklich schön zu lesen.
Auch dies ist nur eine Anpassung.
quelle
Lassen Sie mich neben der Antwort von Azizbekian zwei Dinge hervorheben :
params.startToEnd = button2.id
params.startToEnd = ConstraintLayout.LayoutParams.UNSET
quelle