虽然我看到了一些类似的问题,但没有一个答案对我有用。也许我错过了一些简单的东西,但我看不到它是什么。我有一个带有 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 是正确的,并且肯定不是指向左上角。
非常感谢,乔拉。
为了限制新添加的,Views
您应该克隆ConstraintSet
父布局的 而不是View
正在添加的。定义约束后,这ConstraintSet
应该应用于父布局。还要确保View
在克隆ConstraintSet
.
在您的情况下,添加View
的也是 aConstraintLayout
这就是为什么在克隆集时您没有收到任何错误的原因。
这些线路:
constraintSet.clone(levelItem);
constraintSet.applyTo(levelItem);
应改为:
constraintSet.clone(mapLayout);
constraintSet.applyTo(mapLayout);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句