在ConstraintLayout中动态更改视图的约束条件

4

当我按下一个按钮时,我希望改变ConstraintLayout中一个视图的左边约束(指南线)。我的布局XML文件(相关部分)如下:

<ProgressBar
  android:id="@+id/progress_bar"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginBottom="8dp"
  android:layout_marginLeft="0dp"
  android:layout_marginRight="8dp"
  android:layout_marginTop="8dp"
  android:indeterminate="true"
  android:visibility="gone"
  app:layout_constraintBottom_toTopOf="@+id/guideline_bcrumbs_bottom"
  app:layout_constraintHorizontal_bias="0.0"
  app:layout_constraintLeft_toLeftOf="@+id/guideline_group_left"
  app:layout_constraintRight_toRightOf="parent"
  app:layout_constraintTop_toTopOf="parent"/>

<android.support.constraint.Guideline
  android:id="@+id/guideline_group_left"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  app:layout_constraintGuide_percent="0.2"
  tools:layout_editor_absoluteY="0dp"
  tools:layout_editor_absoluteX="205dp"/>

<android.support.constraint.Guideline
  android:id="@+id/guideline_category_left"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  app:layout_constraintGuide_percent="0.45"
  tools:layout_editor_absoluteY="0dp"
  tools:layout_editor_absoluteX="461dp"/>

我想动态地将进度条的constraintLeft_toLeftOf属性从guideline_group_left更改为guideline_category_left。有什么方法可以实现吗?

编辑:

我已经添加了以下行来调整约束(基于此链接:http://www.techotopia.com/index.php/Managing_Constraints_using_ConstraintSet

ConstraintSet set = new ConstraintSet();
set.connect(mProgressBar.getId(), ConstraintSet.LEFT, R.id.guideline_category_left, ConstraintSet.LEFT, 0);
set.connect(mProgressBar.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 0);
set.applyTo(mConstraintLayout);

然而,在这些更改之后,进度条完全没有显示出来。我感觉很接近,但可能漏掉了什么。

编辑2

我意识到我忘记添加下面这一行,这就是为什么它不起作用的原因。

set.clone(mConstraintLayout);
1个回答

8

解决方案:

我通过以下代码解决了我的问题,如果有其他人遇到类似的问题,这可能会对他们有所帮助。

ConstraintSet set = new ConstraintSet();
set.clone(mConstraintLayout);
set.connect(mProgressBar.getId(), ConstraintSet.LEFT, R.id.guideline_category_left, ConstraintSet.LEFT, 0);
set.connect(mProgressBar.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 0);
set.applyTo(mConstraintLayout);

救命稻草常常藏于小包装,感谢这个答案! - George Udosen
真的,你是个救命恩人,@epekel,希望谷歌在不久的将来添加这个功能,以便轻松配置流畅的XML API。 - mochadwi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接