histoiresetLayoutParams sur ConstraintLayout ne change pas la taille
J'ai 2 textviews, l'un sur l'autre:
XXXXXXXXXXXX[TextView1]
XXXXXXXXXXXX[TextView2]
- Les deux TextViews Aligne droite. (D'où le XXX ci-dessus)
- TextView1 a une couleur de fond.
- TextView2 est toujours plus longue que TextView1
- gauche de TextView1 doit être aligné avec TextView2
Je les 4 ci-dessus exigences. Maintenant tout fonctionne bien en utilisant ConstraintLayout, où la gauche de TextView1 est contrainte à la gauche de TextView2, et la largeur de TextView2 est wrap_content
.
Mais maintenant il est la 5ème exigence:
- TextView2 peut disparaître, laissant derrière TextView1.
setVisibility(GONE)
ne fonctionne pas, car TextView2 doit être wrap_content
. il deviendra 0 en largeur et donc TextView1 aussi bien (depuis sa gauche est contraint à la gauche de TextView2)
Alors j'ai essayé de régler la hauteur de TextView2 à 0, en utilisant le code ci-dessous:
ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams)textView2.getLayoutParams();
lp.width = widthInPixelOrConstant;
textView2.setLayoutParams(lp);
Oops, Rien ne se passe. TextView2 reste là, comme si rien ne s'était passé. J'ai googlé pendant une demi-heure, et a finalement décidé d'envelopper TextView2
dans un LinearLayout
.
Et puis en utilisant le code ci-dessous pour régler la hauteur de TextView2 à 0:
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)view.getLayoutParams();
lp.width = widthInPixelOrConstant;
view.setLayoutParams(lp);
...... Il fonctionne !!!
La question
Donc, apparemment, nous ne pouvons pas utiliser ce que nous avons utilisé avant - setLayoutParams
pour tenter de modifier la hauteur ou la largeur de l'enfant d'un ConstraintLayout lors de l'exécution.
Mais alors, envelopper TextView2 dans un LinearLayout est vraiment stupide.
Est-ce que quelqu'un sait comment modifier la largeur ou la hauteur d'un enfant de ConstraintLayout lors de l'exécution?
Pouvez-vous partager la mise en page entière? – Mehmed