web-dev-qa-db-fra.com

Définir par programme la marge sur ConstraintLayout

Je dois changer la marge de la barre d’outils, qui était faite de ConstraintLayout, dans différents cas. J'ai essayé de le faire de la manière suivante 

ConstraintLayout.LayoutParams newLayoutParams = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
ConstraintLayout.MarginLayoutParams layoutParams = new ConstraintLayout.MarginLayoutParams(newLayoutParams);
layoutParams.setMargins(0, 0, 0, 0);
toolbar.setLayoutParams(newLayoutParams);

mais dans le second cas, layoutParams.setMargins(16, 16, 16, 16); ça n'a pas changé. Alors, quelqu'un peut-il donner un autre moyen ou indiquer l'erreur? Merci d'avoir passé du temps à mon problème.

J'ai essayé d'utiliser newLayoutParams.setMargins(54, 54, 54, 0);, ce qui place les marges à gauche et à droite, mais je dois quand même y placer des marges.

2
Asset Bekbossynov

Finalement, avec l'aide de @Aksh, j'ai trouvé mon erreur et résolu mon problème. Si quelqu'un le trouve utile, je mettrai mon code ci-dessous 

     ConstraintLayout.LayoutParams newLayoutParams = (ConstraintLayout.LayoutParams) toolbar.getLayoutParams();
     newLayoutParams.topMargin = 0;
     newLayoutParams.leftMargin = 0;
     newLayoutParams.rightMargin = 0;
     toolbar.setLayoutParams(newLayoutParams);
5
Asset Bekbossynov

Une fois, j'ai modifié ConstraintLayout avec une ConstraintSet pour modifier les éléments auxquels elle était liée. J'ai également changé la marge dans ce processus qui est le dernier paramètre de la méthode connect:

    ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(layout);
    constraintSet.connect(R.id.layout_id, ConstraintSet.START, R.id.layout_id2, ConstraintSet.END, 8);
    constraintSet.applyTo(layout);

Peut-être que cela vous donne un autre indice pour trouver une solution?

0
Norbert

Pour définir la marge comme si vous aviez créé un bouton, utilisez simplement setX (float x) ou setY (float y), même condition que vous pouvez appliquer avec vos problèmes

Button bt= new Button(this);
bt.setX(20.0);
bt.setY(20.0);
0
yashpal singh

Tu pourrais vouloir essayer

ViewGroup.MarginLayoutParams params = yourConstraintLayout.getLayoutParams();
params.topMargin = x;
//others shows up in suggestion

Je ne l'ai pas essayé, mais cela devrait fonctionner, car ConstraintLayout est un ViewGroup.

0
Aksh