设置按钮和文本以编程方式查看权重



我正在创建一个基本的待办事项应用程序,当调用事件addRow时,我想以编程方式添加下面的XML布局(一个包含文本和按钮的新行(如何以编程方式创建以下布局?

<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/main_table"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.466"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/ll_component_container">
<TableRow
android:layout_width="match_parent"
android:layout_marginTop="30dp"
android:id="@+id/tab1"
android:weightSum="5"
android:layout_height="84dp">
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_weight="4"
android:paddingLeft="20dp"
android:textColor="#FFFFFF"
android:layout_height="wrap_content"
android:text="Value1"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<Button
android:text="Remove"
android:background="#fc032c"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:layout_height="40dp" android:id="@+id/button1"/>
</TableRow>
</TableLayout>

我试过这个,但我找不到如何改变重量和按钮边距。

private fun addRow(content: Editable) {
val tl = findViewById<TableLayout>(R.id.main_table)
val _id = View.generateViewId()
val tr_head = TableRow(this)
tr_head.id = _id
tr_head.layoutParams = TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
84,
5f
)
val label = TextView(this)
label.id = View.generateViewId()
label.text = content
label.setTextColor(Color.WHITE)
label.setPadding(20, 0,0,0)
tr_head.addView(label)
val btn = Button(this)
btn.id = _id + 1
btn.setBackgroundColor(Color.RED)
btn.setText("Remove")
tr_head.addView(label)
tr_head.addView(btn)
tl.addView(
tr_head, TableLayout.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
TableRow.LayoutParams.WRAP_CONTENT
)
)
}

我找到了另一种方法来实现我想要的,所以我没有使用权重,而是使用屏幕宽度来获得相对宽度。为了添加边距,我只是在包含按钮和文本的行之前添加了一个空行。这是感兴趣的人的完整代码。

private fun addRow(content: Editable) {
val tl = findViewById<TableLayout>(R.id.main_table)
val margin = TableRow(this)
val tr_head = TableRow(this)
margin.id = View.generateViewId()
tr_head.id = View.generateViewId()
val tabParams = TableRow.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
84
)
tr_head.setLayoutParams(tabParams)
val label = TextView(this)
label.id = View.generateViewId()
label.text = content
label.setTextColor(Color.WHITE)
val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
label.width = (displayMetrics.widthPixels / 3)*2
label.setPadding(50, 0,0,0)
tr_head.addView(label)
val btn = Button(this)
btn.id = View.generateViewId()
btn.width = (displayMetrics.widthPixels / 3) - 50
btn.setBackgroundColor(Color.RED)
btn.setText("Remove")
btn.setOnClickListener {
tl.removeView(tr_head)
tl.removeView(margin)
}
label.id = View.generateViewId()

val filler = TextView(this)
filler.id = View.generateViewId()
margin.addView(filler)
tr_head.addView(btn)
tl.addView(
margin,  TableLayout.LayoutParams(
TableRow.LayoutParams.MATCH_PARENT,
20
)
)
tl.addView(
tr_head, tabParams
)
}

最新更新