Мне нужна помощь ConstraintSet
. Моя цель - изменить ограничения представления в коде, но я не могу понять, как это сделать правильно.
У меня 4 TextView
с и один ImageView
. Мне нужно установить ImageView
ограничения для одного из TextView
s.
check_answer4 = (TextView) findViewById(R.id.check_answer4);
check_answer1 = (TextView) findViewById(R.id.check_answer1);
check_answer2 = (TextView) findViewById(R.id.check_answer2);
check_answer3 = (TextView) findViewById(R.id.check_answer3);
correct_answer_icon = (ImageView) findViewById(R.id.correct_answer_icon);
Если 1-й ответ правильный, мне нужно установить ограничения ImageView
до
app:layout_constraintRight_toRightOf="@+id/check_answer1"
app:layout_constraintTop_toTopOf="@+id/check_answer1"
Если 2-й ответ правильный, мне нужно установить ограничения ImageView
на
app:layout_constraintRight_toRightOf="@+id/check_answer2"
app:layout_constraintTop_toTopOf="@+id/check_answer2"
И так далее.
android
android-layout
android-view
android-constraintlayout
Большой тренер
источник
источник
Ответы:
Чтобы установить ограничения просмотра изображения:
использование:
Чтобы установить ограничения просмотра изображения:
использование:
источник
.clone(constraintLayout)
что это за переменная и откуда ее взять?ConstraintLayout constraintLayout = findViewById(R.id.parent_layout);
Предположим, мы хотим изменить ограничения во время выполнения, заставив button1 выровняться с button2 при нажатии:
Затем, имея этот макет:
Мы можем сделать следующее:
источник
layoutParams
и чтоval
? Это вообще Java?ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) button1.getLayoutParams();
button1.requestLayout()
который затем проверит экземпляр,LayoutParams
который мы мутировали.requestLayout()
call на,setLayoutParams()
и тогда оно работает. Простое изменениеlayoutParams
и запрос макета, похоже, не помогает.В Kotlin вы можете просто расширить
ConstraintSet
класс и добавить несколько методов, чтобы воспользоваться преимуществами dsl в Kotlin и создать более читаемый код. Как этоИ используйте это так
источник
Я знаю, что мой ответ очень запоздал, но уверен, что это очень поможет другим, которые сюда заходят. Эта статья не моя, но я внес несколько изменений, при этом вам следует постараться ознакомиться с полной статьей здесь.
Наборы ограничений
Ключом к работе с наборами ограничений в коде Java является класс ConstraintSet. Этот класс содержит ряд методов, которые позволяют выполнять такие задачи, как создание, настройка и применение ограничений к экземпляру ConstraintLayout. Кроме того, текущие ограничения для экземпляра ConstraintLayout можно скопировать в объект ConstraintSet и использовать для применения тех же ограничений к другим макетам (с изменениями или без них).
Экземпляр ConstraintSet создается так же, как и любой другой объект Java:
После создания набора ограничений в экземпляре можно вызывать методы для выполнения широкого круга задач. Следующий код настраивает набор ограничений, в котором левая сторона представления кнопки соединяется с правой стороной представления EditText с полем 70dp:
Применение ограничений к макету После того, как набор ограничений настроен, его необходимо применить к экземпляру ConstraintLayout, прежде чем он вступит в силу. Набор ограничений применяется через вызов метода applyTo (), передавая ссылку на объект макета, к которому должны быть применены настройки:
С помощью
ConstraintSet
API вы можете сделать гораздо больше: установка горизонтального и вертикального смещения, центрирование по горизонтали и вертикали, управление цепочками и многое другое.Действительно приятно читать.
Опять же, это всего лишь адаптация.
источник
В дополнение к ответу азизбекяна позвольте мне указать на две вещи:
params.startToEnd = button2.id
params.startToEnd = ConstraintLayout.LayoutParams.UNSET
источник