J'ai une vue comme ci-dessous:
<org.rayanmehr.atlas.shared.customview.CustomTextView
Android:id="@+id/tvDownVoteCount"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginLeft="6dp"
app:layout_constraintVertical_bias="0"
app:layout_constraintTop_toBottomOf="@+id/anchorHelper"
app:layout_constraintLeft_toRightOf="@+id/tvDownVoteIcon"
app:layout_constraintBottom_toBottomOf="@+id/imgComment"
/>
comment puis-je modifier la valeur de app:layout_constraintVertical_bias
ou de toute autre propriété de contrainte par programme sans avoir à nouveau défini l'ensemble des propriétés dans mon activité?
Je viens de trouver la réponse dans ici et vous pouvez utiliser ConstraintSet
pour réaliser ceci comme ci-dessous:
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(context, R.id.activity_constraint);
//for example lets change the vertical bias of tvDownVoteIcon
float biasedValue = 0.2f;
constraintSet.setVerticalBias(R.id.tvDownVoteIcon, biasedValue);
//you can do any other modification and then apply
constraintSet.applyTo( (ConstraintLayout) findViewById(R.id.activity_constraint));
Voici ce que j'ai fait (pas besoin de ConstraintSet
, on peut travailler directement sur les contraintes elles-mêmes):
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) myView.getLayoutParams();
params.horizontalBias = 0.2f; // here is one modification for example. modify anything else you want :)
myView.setLayoutParams(params); // request the view to use the new modified params
cela a fonctionné comme un charme quand j'avais SeekBar
et TextView
dessous (aligné à gauche et à droite), et je voulais mettre à jour la position TextView
pour qu'elle soit sous le curseur SeekBar
, donc j'ai dû mettre à jour les paramètres de biais horizontal la SeekBar
's OnSeekBarChangeListener
Avertissement: je n'ai pas utilisé cette fonctionnalité spécifique. Ceci est juste mon interprétation sur la façon dont j'essaierais de le faire.
Je pense que ce dont vous avez besoin est ConstraintSet
. Après l'avoir obtenu, vous pouvez le modifier et l'appliquer à nouveau. Ceci est un exemple pertinent tiré de cet article .
override fun onCreate(savedInstanceState: Bundle?) {
...
val constraintSet1 = ConstraintSet()
constraintSet1.clone(constraintLayout)
val constraintSet2 = ConstraintSet()
constraintSet2.clone(constraintLayout)
constraintSet2.centerVertically(R.id.image, 0)
var changed = false
findViewById(R.id.button).setOnClickListener {
TransitionManager.beginDelayedTransition(constraintLayout)
val constraint = if (changed) constraintSet1 else constraintSet2
constraint.applyTo(constraintLayout)
changed = !changed
}
}