我有以下xml:
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/image1"
layout="@layout/layout_circular_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintVertical_bias="0"/>
<include
android:id="@+id/image2"
layout="@layout/layout_circular_image"
android:layout_marginStart="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/image1"
app:layout_constraintEnd_toEndOf="@+id/image1"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintVertical_bias="0"/>
<include
android:id="@+id/image3"
layout="@layout/layout_circular_image"
android:layout_marginStart="50dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/image2"
app:layout_constraintEnd_toEndOf="@+id/image2"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintVertical_bias="0"/>
</androidx.constraintlayout.widget.ConstraintLayout>
现在,这是在约束布局中使用的3个图像布局。但我想动态地执行此操作,因为图像视图的数量可以更改。 因此,我创建了以下类:
class MultipleCircularImagesLayout : ConstraintLayout {
lateinit var binding: LayoutMultipleCircularImagesBinding
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
init(context)
}
constructor(context: Context) : super(context) {
init(context)
}
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
init(context)
}
private fun init(context: Context) {
binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.layout_multiple_circular_images, this, true)
}
var childImages: List<String> = emptyList()
set(value) {
field = value
var previousCircularImageLayout: CircularImageLayout? = null
for(url in value) {
val circularImageLayout = CircularImageLayout(context)
circularImageLayout.id = View.generateViewId()
val params = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
val constraintSet = ConstraintSet()
constraintSet.clone(binding.layout)
constraintSet.connect(circularImageLayout.id, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP)
constraintSet.connect(circularImageLayout.id, ConstraintSet.BOTTOM, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM)
if (previousCircularImageLayout != null) {
constraintSet.connect(circularImageLayout.id, ConstraintSet.START, previousCircularImageLayout.id, ConstraintSet.START, 50)
constraintSet.connect(circularImageLayout.id, ConstraintSet.END, previousCircularImageLayout.id, ConstraintSet.END)
} else {
constraintSet.connect(circularImageLayout.id, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START)
constraintSet.connect(circularImageLayout.id, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END)
constraintSet.setHorizontalBias(circularImageLayout.id, 0f)
}
circularImageLayout.layoutParams = params
constraintSet.applyTo(this)
binding.layout.addView(circularImageLayout)
ImageUtils.loadImage(url, circularImageLayout.binding.image)
previousCircularImageLayout = circularImageLayout
}
invalidate()
}
}
设置childImages
列表后,以编程方式进行布局时,版面内仅显示一幅图像。但是,当我通过上面显示的XML对其进行硬编码时,它可以完美地工作。
有人可以帮助我了解以上代码的问题吗?
答案 0 :(得分:0)
您正在尝试在添加视图之前连接布局中的视图。将视图添加和连接到 ConstraintLayout 的一般顺序是:
进行此更改,您将更近一步。