如何解决我无法匹配 textview 宽度
这个问题吓到我了: 我从数据库中获取一些值,我想在表格中显示它们。我正在使用 2 个表格布局,因为我想在上面放一些标题和 1 个滚动条。我的想法是找到每列和它们的最大宽度,将这些值分配给标题文本视图,但它显示如下:
各种代码我都试过了;例如我使用 lp.width=resultado[0]
或 tv1.width=resultado[0]
。另一方面,如果我不写标题,我可以控制行的宽度,但是一旦我放置标题行,一切都会变得一团糟。
总结:我希望表格填满整个屏幕宽度并与标题匹配。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CompraActivity">
<TableLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
<TableLayout
android:id="@+id/tableHeaders"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableLayout
android:id="@+id/tableRows"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
</TableRow>
</TableLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
var tabla2=findViewById<TableLayout>(R.id.tableRows)
val consulta=db.collection(colecion)
var jur: Query =consulta
val numCol = columnas.count()
var lp = TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,TableRow.LayoutParams.WRAP_CONTENT)
lp.setMargins(1,1,1)
//lp.weight= 0.1F
var filas = arrayListOf<filaordenada>()
活动:
for (dato in datos){
when (dato.criterio){
"IGUAL" -> jur=jur.whereIn(dato.campo,dato.elecciones)
"NO IGUAL" -> jur=jur.whereNotIn(dato.campo,dato.elecciones)
"=" -> jur=jur.whereEqualTo(dato.campo,dato.elecciones)
">=" -> jur=jur.whereGreaterThanOrEqualTo(dato.campo,dato.elecciones)
"<=" -> jur=jur.whereLessThanOrEqualTo(dato.campo,dato.elecciones)
}
}
var resultado=arrayListOf<Int>(0,0)
var i=0
jur.get().addOnSuccessListener { results->
for (document in results){
var row = TableRow (this)
for (j in 0 until numCol){
var texto = TextView(this);
texto.setText(document.get(columnas.get(j)).toString())
texto.gravity = Gravity.CENTER
texto.setBackgroundColor(Color.CYAN)
//texto.layoutParams
row.addView(texto,lp)
texto.measure(0,0)
resultado[i]= max(resultado[i],texto.measuredWidth)
println(resultado)
}
filas.add(filaordenada(row,document.get("tipo").toString()))
filas.sort()
//tabla.addView(row,i)
i+=1
}
for (i in 0 until filas.count()){
var rp= TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT,TableLayout.LayoutParams.WRAP_CONTENT)
tabla2.addView(filas[i].fila,i,rp)
}
println(resultado)
var tv1 = TextView(this)
var tv2 = TextView(this)
var tv3 = TextView(this)
var tv4 = TextView(this)
tv1.text = "Articulo"
tv2.text = "Tipo"
tv3.text = "Almacen"
tv4.text = "Q"
//tv1.width=resultado[0]
//tv2.width=resultado[1]
//tv3.width=resultado[2]
//tv4.width=resultado[3]
tv1.gravity = Gravity.CENTER
tv2.gravity = Gravity.CENTER
tv3.gravity = Gravity.CENTER
tv4.gravity = Gravity.CENTER
tv1.setBackgroundColor(Color.GRAY)
tv2.setBackgroundColor(Color.GRAY)
tv3.setBackgroundColor(Color.GRAY)
tv4.setBackgroundColor(Color.GRAY)
var headerRow= TableRow(this)
lp.width=resultado[0]
headerRow.addView(tv1,lp)
lp.width=resultado[1]
headerRow.addView(tv2,lp)
lp.width=resultado[2]
headerRow.addView(tv3,lp)
lp.width=resultado[3]
headerRow.addView(tv4,lp)
var table=findViewById<TableLayout>(R.id.tableHeaders)
table.addView(headerRow,0)
}
P.S:知道这不是最简单的方法,但我正在测试它,一旦我得到正确的表格,我会改进应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。