Программное создание ConstraintLayout и позиционирование

16.01.2025

Для создания контейнера в коде Java применяется одноименный класс ConstraintLayout. Для создания объекта используется конструктор, принимающий значения для ширины и высоты элемента:

ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(
    ConstraintLayout.LayoutParams.WRAP_CONTENT, 
    ConstraintLayout.LayoutParams.WRAP_CONTENT
);
  • Первый параметр: ширина элемента.

  • Второй параметр: высота элемента.

ConstraintLayout.LayoutParams.WRAP_CONTENT указывает, что размеры элемента соответствуют его содержимому. Также можно использовать ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, аналогичный 0dp в атрибутах layout_width и layout_height, который растягивает элемент до размеров контейнера.

Пример с точными размерами

ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(
    ConstraintLayout.LayoutParams.MATCH_CONSTRAINT, 200
);

Настройка позиционирования

Для управления позиционированием используется класс ConstraintLayout.LayoutParams. Ниже перечислены его основные поля для установки расположения:

  • baselineToBaseline — базовая линия элемента относительно другого.

  • bottomToBottom — нижняя граница элемента по нижней границе другого.

  • bottomToTop — нижняя граница элемента по верхней границе другого.

  • leftToLeft — левая граница элемента по левой границе другого.

  • leftToRight — левая граница элемента по правой границе другого.

  • rightToLeft — правая граница элемента по левой границе другого.

  • rightToRight — правая граница элемента по правой границе другого.

  • startToEnd, startToStart, endToEnd, endToStart — выравнивание по началу или завершению элемента.

  • topToBottom, topToTop — верхняя граница элемента относительно другого.

Значением для этих полей служит id элемента. Для позиционирования относительно контейнера используется ConstraintLayout.LayoutParams.PARENT_ID.

Пример: позиционирование в левом верхнем углу контейнера

Элемент TextView будет расположен в верхнем левом углу контейнера. Это эквивалентно:


Пример: размещение элементов относительно друг друга

При размещении элементов друг относительно друга сначала нужно сгенерировать их id:

Пример выравнивания

  • Правая граница EditText по левой границе Button:

  • Левая граница Button по правой границе EditText:

Last updated