J'ai besoin d'aide avec ConstraintSet
. Mon objectif est de modifier les contraintes de la vue dans le code, mais je ne sais pas comment faire cela correctement.
J'ai 4 TextView
s et un ImageView
. J'ai besoin de fixer des ImageView
contraintes à l'un des TextView
s.
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);
Si la première réponse est correcte, je dois définir des contraintes de ImageView
à
app:layout_constraintRight_toRightOf="@+id/check_answer1"
app:layout_constraintTop_toTopOf="@+id/check_answer1"
Si la deuxième réponse est correcte, je dois définir des contraintes de ImageView
à
app:layout_constraintRight_toRightOf="@+id/check_answer2"
app:layout_constraintTop_toTopOf="@+id/check_answer2"
Etc.
android
android-layout
android-view
android-constraintlayout
Grand entraîneur
la source
la source
Réponses:
Pour définir les contraintes de la vue d'image sur:
utilisation:
Pour définir les contraintes de la vue d'image sur:
utilisation:
la source
.clone(constraintLayout)
quelle est cette variable et d'où puis-je l'obtenir?ConstraintLayout constraintLayout = findViewById(R.id.parent_layout);
Supposons que nous souhaitons modifier les contraintes pendant l'exécution, en alignant button1 sur button2 lorsque vous cliquez dessus:
Ensuite, ayant cette disposition:
Nous pouvons faire ce qui suit:
la source
layoutParams
etval
? Est-ce même Java?ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) button1.getLayoutParams();
button1.requestLayout()
ce qui inspectera l'instance deLayoutParams
celle que nous avons mutée.requestLayout()
appel parsetLayoutParams()
, puis cela fonctionne. Le simple fait de muterlayoutParams
et de demander la mise en page moi-même ne semble pas faire l'affaire.Dans Kotlin, vous pouvez simplement étendre la
ConstraintSet
classe et ajouter des méthodes pour tirer parti de dsl dans Kotlin et produire un code plus lisible. Comme çaEt utilisez-le comme ça
la source
Je sais que ma réponse est très tardive, mais je suis sûr que cela aiderait les autres qui s'arrêtent beaucoup ici. Cet article n'est pas le mien mais j'ai apporté quelques modifications, cela étant dit, vous devriez essayer de consulter l'article complet ici
Ensembles de contraintes
La clé pour travailler avec des jeux de contraintes dans le code Java est la classe ConstraintSet. Cette classe contient une gamme de méthodes qui permettent des tâches telles que la création, la configuration et l'application de contraintes à une instance de ConstraintLayout. De plus, les contraintes actuelles d'une occurrence de ConstraintLayout peuvent être copiées dans un objet ConstraintSet et utilisées pour appliquer les mêmes contraintes à d'autres présentations (avec ou sans modifications).
Une instance de ConstraintSet est créée comme tout autre objet Java:
Une fois qu'un jeu de contraintes a été créé, des méthodes peuvent être appelées sur l'instance pour effectuer un large éventail de tâches. Le code suivant configure un jeu de contraintes dans lequel le côté gauche d'une vue Button est connecté au côté droit d'une vue EditText avec une marge de 70dp:
Application de contraintes à une présentation Une fois le jeu de contraintes configuré, il doit être appliqué à une instance de ConstraintLayout avant qu'il ne prenne effet. Un jeu de contraintes est appliqué via un appel à la méthode applyTo (), en passant par une référence à l'objet de mise en page auquel les paramètres doivent être appliqués:
Il y a beaucoup plus de choses que vous pouvez faire avec le
ConstraintSet
API, définir un biais horizontal et vertical, centrer horizontalement et verticalement, manipuler des chaînes et bien plus encore.Très bonne lecture.
Encore une fois, ce n'est qu'une adaptation.
la source
En plus de la réponse d' Azizbekian , permettez-moi de souligner deux choses:
params.startToEnd = button2.id
params.startToEnd = ConstraintLayout.LayoutParams.UNSET
la source