Удаление / редактирование ограничения представления внутри ConstraintLayout программно
У меня есть вид (Linearlayout
) внутри ConstraintLayout
со следующими атрибутами:
android:id="@+id/myView"
app:layout_constraintTop_toBottomOf="@+id/anotherView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
В некоторых случаях я хочу выровнять myView
влево, просто удалив правое ограничение. однако я не могу этого сделать.
Я попытался использовать следующее, просто скопировать и применить параметры ограничения:
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(holder.myView.getLayoutParams());
holder.myView.setLayoutParams(layoutParams);
но layoutParams
всегда получает пустой набор параметров и отправляет представление в верхний левый угол. Возможно, это потому, что я использую это внутри recyclerView
?
Как это выглядит внутри recyclerView
:
public void onBindViewHolder(final RecyclerView.ViewHolder basicHolder, int position) {
ProfileAdapter.UserInfoViewHolder holder = (ProfileAdapter.UserInfoViewHolder) basicHolder;
ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(holder.myView.getLayoutParams());
holder.myView.setLayoutParams(layoutParams);
}
2 ответа
Решение
Существует ошибка (будет исправлена в следующем выпуске) при настройке параметров макета так, как вы это делаете. Тем временем вы можете сделать:
ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) holder.myView.getLayoutParams();
layoutParams.rightToRight = ConstraintLayout.LayoutParams.UNSET;
holder.myView.setLayoutParams(layoutParams);
То же самое в Котлине:
val layoutParams = view.layoutParams as ConstraintLayout.LayoutParams
layoutParams.bottomToBottom = ConstraintLayout.LayoutParams.UNSET