动态设置约束小部件

时间:2019-10-07 12:27:58

标签: java android android-studio frontend android-constraintlayout

您可以在布局xml中轻松创建约束:

example

但是,我无法在代码中做完全相同的事情。 有人可以帮助将以下xml转换为Java代码吗?

<TextView
    ...
    android:layout_marginStart="10dp"
    android:layout_marginTop="10dp"
    android:layout_marginEnd="10dp"
    android:layout_marginBottom="10dp"
    app:layout_constraintBottom_toTopOf="@+id/details"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toEndOf="@+id/image"
    app:layout_constraintTop_toTopOf="parent" />

我尝试了以下代码来设置边距,但是它不起作用。 textView始终位于同一位置。

ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(textView.getLayoutParams());
layoutParams.setMargins(10,10,10,10);
description.setLayoutParams(layoutParams);

1 个答案:

答案 0 :(得分:1)

约束不是LayoutParams的一部分。

您要查找的是在ConstraintLayout本身上设置的 ConstraintSet

    final ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(constraintLayout);
    constraintSet.connect(R.id.textViewId, ConstraintSet.BOTTOM, R.id.details, ConstraintSet.TOP,10 /*"DP"*/);
    constraintSet.connect(R.id.textViewId, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END,10 /*"DP"*/);
    constraintSet.connect(R.id.textViewId, ConstraintSet.START, R.id.image, ConstraintSet.END,10 /*"DP"*/);
    constraintSet.connect(R.id.textViewId, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP,10 /*"DP"*/);
    constraintSet.applyTo(constraintLayout);

请记住,在代码中,作为最后一个参数传递的值将以像素为单位,因此您必须将其转换为尺寸像素(DP)。