所以我有这个界面,单击该按钮时,我将新项目添加到TableLayout中。 See this picture
问题在于您在上图中看到的问题,而不是在第三列的顶部添加新项,而不是在第三列中将其添加为新行。因此,当listsize大于5时,新项目应将线性添加到第三列的第二列。我只能通过添加新行来解决。我不知道如何解决这个问题。
这是代码
fun addPlayerToTable(player: String) {
//Create new Row and TextView
val newRow = TableRow(this)
val newText = TextView(this)
var layoutParams = TableRow.LayoutParams(
TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT)
//Set text on ViewText
newText.text = player
if(players.size > 5){
layoutParams.column = 2
}else {
layoutParams.column = 1
}
//Add TextViews and Rows dynamically
newRow.addView(newText, layoutParams)
table!!.addView(newRow)
}
答案 0 :(得分:0)
https://developer.android.com/reference/android/widget/TableLayout
引用此文档后,我看到您可以在使用“ addView”方法时显式设置索引。
在添加视图之前使用if语句来检查layoutParams.column == 2,如果它确实将addView的索引值设置为players.size-5。
编辑:如果希望每5个玩家有一个新列,则将变量设置为5,再乘以列数,然后使用该值从players.size中减去。
即。 players.size为20,添加的下一个玩家将从第5列开始。要使该玩家进入第1行或索引0,您需要从players.size中减去20,如果您将5乘以列数,然后再减去5,您将轻松获得此结果。
答案 1 :(得分:0)
所以我实际上解决了它。该修复程序是根据某些条件添加了新的TextViews和TableRows。还要从索引1-6中删除视图,因为我们不想删除0索引。也许可以更简单地完成它。
fun addPlayerToTable(player: String) {
//Create new Row and TextView
var newRow = TableRow(this)
var newText = TextView(this)
var list = mutableListOf<TableRow>()
var texts = mutableListOf<TextView>()
if(players.size > 5){
for(i in 0 until players.size){
list.add(TableRow(this))
texts.add(TextView(this))
texts[i].text = players[i]
}
}
var layoutParams = TableRow.LayoutParams(
TableRow.LayoutParams.WRAP_CONTENT,
TableRow.LayoutParams.WRAP_CONTENT)
layoutParams.column = 1
//Set text on ViewText
newText.text = player
if(players.size > 5){
for(i in 1 until 6){
table!!.removeViewAt(1)
}
for(i in 0 until 5){
if(i + 5 >= players.size){
list[i].addView(texts[i], layoutParams)
table!!.addView(list[i])
}
else{
list[i].addView(texts[i], layoutParams)
list[i].addView(texts[i+5], layoutParams)
table!!.addView(list[i])
}
}
}else {
//Add TextViews and Rows dynamically
newRow.addView(newText, layoutParams)
table!!.addView(newRow)
}
}