Java 以编程方式更改TextView的topConstraint

Java 以编程方式更改TextView的topConstraint,java,android,Java,Android,我只是从安卓开始我的冒险,所以如果这个问题很傻,请原谅,但我一直在寻找答案,而且很难找到答案。问题很简单:我可以通过编程更改此参数的值吗 app:layout\u constraintTop\u toBottomOf=“@+id/divider1” 我尝试做的很简单:我有一个可见的对象行,下面有一个分隔符,下面有一个文本视图,我将其约束到分隔符的底部。我还有第二行对象,下面有另一个分隔符,从可见性设置为GONE开始,但可以通过浮动操作按钮切换为visible。我需要第一行下方的文本视图向下移动,

我只是从安卓开始我的冒险,所以如果这个问题很傻,请原谅,但我一直在寻找答案,而且很难找到答案。问题很简单:我可以通过编程更改此参数的值吗

app:layout\u constraintTop\u toBottomOf=“@+id/divider1”

我尝试做的很简单:我有一个可见的对象行,下面有一个分隔符,下面有一个文本视图,我将其约束到分隔符的底部。我还有第二行对象,下面有另一个分隔符,从可见性设置为GONE开始,但可以通过浮动操作按钮切换为visible。我需要第一行下方的文本视图向下移动,以便在第二行出现时为其腾出空间。我可以使用setY,但考虑到这两行是相同的,只是值不同,简单地将TextView的top约束从“divider1”更改为“divider2”更容易。能做到吗?下面是按钮目前的作用:

addButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (!isPair2Visible) {
                    driverLabel2.setVisibility(View.VISIBLE);
                    followerLabel2.setVisibility(View.VISIBLE);
                    driver2.setVisibility(View.VISIBLE);
                    follower2.setVisibility(View.VISIBLE);
                    ratioLabel2.setVisibility(View.VISIBLE);
                    ratio2.setVisibility(View.VISIBLE);
                    divider2.setVisibility(View.VISIBLE);
                    isPair2Visible = true;
                }
            }
        });
这是我需要移动的文本视图:

    <TextView
        android:id="@+id/totalRatio"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:text="@string/ratio_default"
        android:textColor="@color/colorAccentOrange"
        android:textSize="24sp"
        app:layout_constraintStart_toStartOf="@+id/ratio1"
        app:layout_constraintTop_toBottomOf="@+id/divider1" />

如果我能把最后一行改成:


app:layout\u constraintTop\u toBottomOf=“@+id/divider2”/>
您可以使用
ConstraintSet
执行此操作:

ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(constraintLayout); // parent layout of your TextView
constraintSet.connect(R.id.divider2, ConstraintSet.BOTTOM, R.id.totalRatio,ConstraintSet.TOP, 0);
constraintSet.applyTo(constraintLayout);
试用

另一种选择:

ConstraintLayout.LayoutParams textViewParams =
            (ConstraintLayout.LayoutParams) textView.getLayoutParams();
textViewParams.topToBottom = R.id.divider2;
textView.setLayoutParams(textViewParams);

这个问题的答案应该会给你你所需要的。以后请在stackoverflow上搜索类似的问题,然后再发布。我确实搜索过类似的问题。他们使用的解决方案都被Android Studio文档标记为不推荐,我无法让他们在Android Studio 3.5.2中工作。相信我,我已经测试了十几个使用ConstraintSet的解决方案,但我就是无法让它工作。欢迎您。其他选项提到了约束集。。。一次更改多个视图很有用。然而,由于您试图更改单个视图的锚定,我认为这是最简单的方法。
ConstraintLayout.LayoutParams textViewParams =
            (ConstraintLayout.LayoutParams) textView.getLayoutParams();
textViewParams.topToBottom = R.id.divider2;
textView.setLayoutParams(textViewParams);