Программно установить поле для ConstraintLayout - PullRequest
0 голосов
/ 03 сентября 2018

Мне нужно изменить маржу панели инструментов, которая была сделана из ConstraintLayout, в разных случаях. Я пытался сделать это следующим образом

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);

но во втором случае layoutParams.setMargins(16, 16, 16, 16); это не изменилось. Так может кто-то дать другой путь или указать на ошибку. Спасибо, что уделили время моей проблеме.

Я пытался использовать newLayoutParams.setMargins(54, 54, 54, 0);, это устанавливает поля слева и справа, но мне все еще нужно поместить поле поверх него.

Ответы [ 4 ]

0 голосов
/ 11 июня 2019

Для layoutParams.setMargins(w, x, y, z) причина, по которой он не меняется, заключается в том, что вы, скорее всего, рассматриваете значения как Dp, а не как Px, для которых метод принимает.

Чтобы получить Px из Dp, вы хотите использовать:

int pxValue = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics());

0 голосов
/ 03 сентября 2018

Вы можете попробовать

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

Я не пробовал, хотя считаю, что он должен работать, так как ConstraintLayout является ViewGroup.

0 голосов
/ 03 сентября 2018

Наконец, с помощью @Aksh я нашел свою ошибку и решил свою проблему. Если кто-то найдет это полезным, я приведу свой код ниже

     ConstraintLayout.LayoutParams newLayoutParams = (ConstraintLayout.LayoutParams) toolbar.getLayoutParams();
     newLayoutParams.topMargin = 0;
     newLayoutParams.leftMargin = 0;
     newLayoutParams.rightMargin = 0;
     toolbar.setLayoutParams(newLayoutParams);
0 голосов
/ 03 сентября 2018

Однажды я изменил ConstraintLayout на ConstraintSet, чтобы изменить элементы, с которыми он связан. Я также изменил маржу в этом процессе, который является последним параметром метода 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);

Может быть, это дает вам еще один совет, чтобы найти решение?

...