我在约束布局中扩大了以下视图。 查看:
<?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的工具栏下方的目的,但这并不反映在布局中。 认为视图需要至少两个接触,因此我使第二个连接仍然不起作用。 看起来像这样:
膨胀的布局仍在移动到顶部,好像上面没有任何约束。
答案 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);