我想創建一個包含 3 行TextView元素的簡單布局。第一行和最后一行僅包含一個文本視圖,中間行包含兩個相鄰的文本視圖。
鏈接到圖片
這是用于生成視圖的 xml
<TextView
android:id="@ id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="TextView"
app:layout_constraintBottom_toTopOf="@ id/textView2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@ id/textView2"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="TextView"
app:layout_constraintBottom_toTopOf="@ id/textView4"
app:layout_constraintEnd_toStartOf="@ id/textView3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@ id/textView" />
<TextView
android:id="@ id/textView3"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="TextView"
app:layout_constraintBottom_toTopOf="@ id/textView4"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@ id/textView2"
app:layout_constraintTop_toBottomOf="@ id/textView" />
<TextView
android:id="@ id/textView4"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@ id/textView2" />
我正在嘗試使用以下代碼以編程方式重新創建相同的視圖:
val layout = findViewById<ConstraintLayout>(R.id.main)
val cs = ConstraintSet()
cs.clone(layout)
val textViews: MutableList<TextView> = ArrayList<TextView>()
for (i in 1..4) {
val t = TextView(this)
t.id = View.generateViewId()
t.text = "Text" i.toString()
layout.addView(t)
textViews.add(t)
}
//Just make suffixes similar to the layout xml
val t1 = textViews[0]
val t2 = textViews[1]
val t3 = textViews[2]
val t4 = textViews[3]
// app:layout_constraintBottom_toTopOf="@ id/textView2"
// app:layout_constraintEnd_toEndOf="parent"
// app:layout_constraintStart_toStartOf="parent"
// app:layout_constraintTop_toTopOf="parent" />
cs.connect(t1.id, ConstraintSet.BOTTOM, t2.id, ConstraintSet.TOP)
cs.connect(t1.id, ConstraintSet.END, layout.id, ConstraintSet.END)
cs.connect(t1.id, ConstraintSet.START, layout.id, ConstraintSet.START)
cs.connect(t1.id, ConstraintSet.TOP, layout.id, ConstraintSet.TOP)
// app:layout_constraintBottom_toTopOf="@ id/textView4"
// app:layout_constraintEnd_toStartOf="@ id/textView3"
// app:layout_constraintStart_toStartOf="parent"
// app:layout_constraintTop_toBottomOf="@ id/textView" />
cs.connect(t2.id, ConstraintSet.BOTTOM, t4.id, ConstraintSet.TOP)
cs.connect(t2.id, ConstraintSet.END, t3.id, ConstraintSet.START)
cs.connect(t2.id, ConstraintSet.START, layout.id, ConstraintSet.START)
cs.connect(t2.id, ConstraintSet.TOP, t1.id, ConstraintSet.BOTTOM)
// app:layout_constraintBottom_toTopOf="@ id/textView4"
// app:layout_constraintEnd_toEndOf="parent"
// app:layout_constraintStart_toEndOf="@ id/textView2"
// app:layout_constraintTop_toBottomOf="@ id/textView" />
cs.connect(t3.id, ConstraintSet.BOTTOM, t4.id, ConstraintSet.TOP)
cs.connect(t3.id, ConstraintSet.END, layout.id, ConstraintSet.END)
cs.connect(t3.id, ConstraintSet.START, t2.id, ConstraintSet.END)
cs.connect(t3.id, ConstraintSet.TOP, t1.id, ConstraintSet.BOTTOM)
// app:layout_constraintBottom_toBottomOf="parent"
// app:layout_constraintEnd_toEndOf="parent"
// app:layout_constraintStart_toStartOf="parent"
// app:layout_constraintTop_toBottomOf="@ id/textView2" />
cs.connect(t4.id, ConstraintSet.BOTTOM, layout.id, ConstraintSet.BOTTOM)
cs.connect(t4.id, ConstraintSet.END, layout.id, ConstraintSet.END)
cs.connect(t4.id, ConstraintSet.START, layout.id, ConstraintSet.START)
cs.connect(t4.id, ConstraintSet.TOP, t2.id, ConstraintSet.BOTTOM)
但是,這似乎不起作用,所有文本視圖都放置在顯示屏的左上角。
你能告訴我如何使這段代碼作業。
uj5u.com熱心網友回復:
僅僅克隆約束并進行更改是不夠的。必須使用ConstraintSet#applyTo()將更改應用于ConstraintLayout。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/426324.html
