Ответ 1
Немного поздно в игре, но вам нужно в основном рассматривать ваши взгляды в макете ограничений как обычные представления, которые просто имеют свои собственные LayoutParams.
В случае с ConstraintLayout документация находится здесь: https://developer.android.com/reference/android/support/constraint/ConstraintLayout.LayoutParams.html
Этот класс содержит различные атрибуты, определяющие, как представление должно быть выложено внутри ConstraintLayout. Для создания ограничений во время выполнения рекомендуется использовать ConstraintSet.
Итак, рекомендуемый метод - использовать ConstraintSet.
Там хороший образец кода, но основная идея - создать новый набор (путем копирования/клонирования/нового и т.д.), установить его свойства и затем применить его к вашему макету.
Например: предположим, что ваш макет содержит ConstraintLayout (здесь называется mConstraintLayout), и внутри него есть представление (R.id.go_button в образце), вы можете сделать:
ConstraintSet set = new ConstraintSet();
// You may want (optional) to start with the existing constraint,
// so uncomment this.
// set.clone(mConstraintLayout);
// Resize to 100dp
set.constrainHeight(R.id.go_button, (int)(100 * density));
set.constrainWidth(R.id.go_button, (int)(100 * density));
// center horizontally in the container
set.centerHorizontally(R.id.go_button, R.id.rootLayout);
// pin to the bottom of the container
set.connect(R.id.go_button, BOTTOM, R.id.rootLayout, BOTTOM, 8);
// Apply the changes
set.applyTo(mConstraintLayout);
// this is my… (ConstraintLayout) findViewById(R.id.rootLayout);