以编程方式添加时,在左上方的ConstraintLayout视图

时间:2018-11-09 22:19:38

标签: android android-constraintlayout

尽管我看到了类似的问题,但没有一个答案对我有用。也许我缺少一些简单的东西,但是我看不到它是什么。 我有一个带有ImageView的ConstraintLayout。我正在动态添加视图并相对于图像视图添加视图。所有视图都停留在图像视图的左上角。

这是容器布局:

<android.support.constraint.ConstraintLayout
            android:id="@+id/mapLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <ImageView
                android:id="@+id/mapImage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="matrix"
                android:src="@drawable/fullmap"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintStart_toStartOf="parent"/>

        </android.support.constraint.ConstraintLayout>

这是添加这些视图的代码:

Map<Integer, Point> positions = createPoints(levels);
ConstraintLayout mapLayout = findViewById(R.id.mapLayout);
LayoutInflater inflater = LayoutInflater.from(this);
for (int i = 0; i < levels.size(); i++) {
    ConstraintLayout levelItem = (ConstraintLayout) inflater.inflate(R.layout.quest_map_level_item, mapLayout, false);
    levelItem.setId(i);
    Point point = positions.get(i);
    ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(levelItem);
    mapLayout.addView(levelItem);
    constraintSet.connect(levelItem.getId(), ConstraintSet.START, R.id.mapLayout, ConstraintSet.START, point.x);
    constraintSet.connect(levelItem.getId(), ConstraintSet.TOP, R.id.mapLayout, ConstraintSet.TOP, point.y);
    constraintSet.applyTo(levelItem);
}

如上所述,结果是所有视图都位于左上角。明确一点-point.x和point.y是正确的,请确保没有指向左上角。

非常感谢, 朱拉。

1 个答案:

答案 0 :(得分:1)

为了约束新添加的error CS1503: Argument 1: cannot convert from 'System.Web.Http.AllowAnonymousAttribute' to 'System.Web.Http.Filters.IFilter' ,您应该克隆父布局的Views,而不是正在添加的ConstraintSet。定义约束后,应将此View应用于父布局。另外,请确保在克隆ConstraintSet之前将新的View添加到布局中。

对于您来说,添加的ConstraintSet也是View,这就是为什么克隆集时不会出现任何错误的原因。

这些行:

ConstraintLayout

应更改为:

constraintSet.clone(levelItem);
constraintSet.applyTo(levelItem);