web-dev-qa-db-fra.com

Changer la hauteur par programme dans la disposition des contraintes?

J'ai une mise en page simple: une TextView à hauteur fixe avec trois objets ImageView ancrés au bas de la vue.

enter image description here

Comment puis-je modifier par programme la hauteur de chacun des ImageViews afin qu'ils varient dans une certaine plage (10dp, 16dp en dessous de TextView)? Concrètement, mon activité obtient une liste de pourcentages (entre 0 et 1) représentant la part de cet espace vertical que chacune de ces "barres" devrait occuper.

J'ai essayé ce qui suit sans succès:

// No visible difference
imgView.setMinHeight(newHeight);

// No change to height, but horizontal constrained was messed up
imgView.setLayoutParams(new LayoutParam(imgView.getWidth(), newHeight);
9
rodrigo-silveira

Si par "hauteur" vous entendez la dimension absolue de haut en bas du ImageView, vous pouvez effectuer les opérations suivantes pour doubler la hauteur d'un ImageView. Vous pouvez définir la hauteur à la valeur souhaitée.

ImageView iv = (ImageView) findViewById(R.id.imageView);
ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) iv.getLayoutParams();
lp.height = lp.height * 2;
iv.setLayoutParams(lp);

Voir ConstraintLayout.LayoutParams .

Mais, si par "hauteur" vous voulez dire la position verticale de ImageView, vous pouvez faire ce qui suit pour changer le biais vertical de ImageView (en supposant que vous utilisez ConstraintLaytout) :

ConstraintSet cs = new ConstraintSet();
ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.layout);
cs.clone(layout);
cs.setVerticalBias(R.id.imageView, 0.25f);
cs.applyTo(layout);

Voir setVerticalBias .

Il existe d'autres façons de déplacer un ImageView sur la mise en page, mais cela dépend de la façon dont votre mise en page est configurée.

22
Cheticamp