添加约束以进行编程查看

时间:2019-01-14 09:39:11

标签: android-constraintlayout

我在约束布局中扩大了以下视图。 查看:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@color/colorPrimary"
    android:orientation="horizontal">
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight=".25"
        android:text="menu"/>
<android.support.v7.widget.SearchView
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layoutDirection="rtl"
    android:layout_height="match_parent">
</android.support.v7.widget.SearchView>
</LinearLayout>

使用以下代码将视图添加到约束布局中:

ConstraintLayout constraintLayout  =  findViewById(R.id.root);
                View inflatedLayout= inflater.inflate(R.layout.menu, constraintLayout, false);                   constraintLayout.addView(inflatedLayout);

由于没有约束,该视图将移至屏幕顶部。它与布局顶部的工具栏重叠。该工具栏仅受约束于其顶部,其ID为android:id="@+id/toolbar"

如何通过编程方式添加约束,以便将膨胀后的视图约束在工具栏下方。 我使用约束集将约束添加到膨胀视图中,如下所示:

 LayoutInflater inflater = LayoutInflater.from(PaymentStatus2.this);

                ConstraintLayout constraintLayout  =  findViewById(R.id.nested);

                View inflatedLayout= inflater.inflate(R.layout.menu, constraintLayout, false);
                constraintLayout.addView(inflatedLayout);
                ConstraintSet set = new ConstraintSet();
                 set.connect(constraintLayout.getId(),ConstraintSet.TOP,inflatedLayout.getId(),ConstraintSet.TOP,50);
            set.connect(constraintLayout.getId(),ConstraintSet.START,inflatedLayout.getId(),ConstraintSet.START,0);

                set.applyTo(constraintLayout);

在第一条连接线中,我将父级顶部连接到膨胀视图的顶部,并设置50dp的边距,这应该达到我将其保持在高度为50dps的工具栏下方的目的,但这并不反映在布局中。 认为视图需要至少两个接触,因此我使第二个连接仍然不起作用。  看起来像这样:

https://ibb.co/r2wK83V

膨胀的布局仍在移动到顶部,好像上面没有任何约束。

1 个答案:

答案 0 :(得分:1)

对于其他坚持这一点的人,我发现了它是如何完成的。 给布局充气,添加布局,然后克隆布局,然后需要连接所有四个约束端,然后才可以工作。

connect函数需要五个参数  (i)视图的视图ID,(ii)约束方向,(iii)其他视图ID,(iv)约束方向,(v)边距

 ConstraintLayout constraintLayout  =  findViewById(R.id.nested);
                View inflatedLayout= inflater.inflate(R.layout.menu, constraintLayout , false);
                inflatedLayout.setLayoutParams(new ConstraintLayout.LayoutParams(0,0));
                constraintLayout.addView(inflatedLayout,0);
                ConstraintSet set = new ConstraintSet();
                set.clone(constraintLayout);
                set.connect(inflatedLayout.getId(),ConstraintSet.TOP,toolbar.getId(),ConstraintSet.BOTTOM,8);
                set.connect(inflatedLayout.getId(),ConstraintSet.START,constraintLayout.getId(),ConstraintSet.START,8);
                set.connect(inflatedLayout.getId(),ConstraintSet.END,constraintLayout.getId(),ConstraintSet.END,8);
                set.connect(inflatedLayout.getId(),ConstraintSet.BOTTOM,swipeRefreshLayout.getId(),ConstraintSet.TOP,8);
                set.applyTo(constraintLayout);