Android中两个相同TableLayout的TableRow显示不一致问题
问题:两个配置相近的TableLayout动态添加行后显示效果不一致
我在XML布局中创建了两个配置几乎完全相同的TableLayout,唯一区别是第二个TableLayout添加了android:layout_below="@+id/zaberlist"属性,指定其位于第一个TableLayout的下方。通过Kotlin代码向两个TableLayout中添加了除变量名外完全一致的、包含TextView的TableRow,但应用运行后两者的显示效果却不相同。
XML布局代码
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rlayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp"> <TextView android:id="@+id/txt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/detected_drones" android:textSize = "25sp" android:textStyle="bold" android:textColor="@android:color/black" /> <!-- FIRST TABLELAYOUT --> <TableLayout android:id="@+id/zaberlist" android:layout_width="match_parent" android:layout_height="wrap_content" android:stretchColumns="0,1,2" /> <!-- SECOND TABLELAYOUT --> <TableLayout android:id="@+id/naberlist" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/zaberlist" <!-- ONLY DIFFERENCE BETWEEN THEM --> android:stretchColumns="0,1,2" /> <Button android:id="@+id/scanBtn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="15dp" android:visibility="visible" android:background="@android:color/holo_green_dark" android:text="@string/start_scan" android:layout_alignParentBottom="true" /> <Button android:id="@+id/scanBtnStop" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="15dp" android:visibility="gone" android:background="@android:color/holo_red_dark" android:baselineAligned="false" android:text="@string/stop_scan" android:layout_alignParentBottom="true" /> </RelativeLayout>
显示效果
两个TableLayout的列宽分配、内容对齐方式存在明显差异(第一个TableLayout的列未按预期均匀拉伸,第二个则正常)
Kotlin动态添加TableRow代码
val tr_head1 = TableRow(this@WIFIScannerActivity) tr_head1.layoutParams = TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT ) val label_name1 = TextView(this@WIFIScannerActivity) label_name1.text = scanResult.SSID if(scanResult.SSID==""){ label_name1.text = "*hidden*" } label_name1.textSize = 14F label_name1.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT,1F) label_name1.setPadding(20,0,0,0) label_name1.setTypeface(null, Typeface.BOLD) tr_head1.addView(label_name1) // add the column to the table row here val label_mac1 = TextView(this@WIFIScannerActivity) // part3 label_mac1.text = scanResult.BSSID label_mac1.textSize = 14F label_mac1.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT,1F) label_mac1.setTypeface(null, Typeface.BOLD) tr_head1.addView(label_mac1) // add the column to the table row here val label_distance1 = TextView(this@WIFIScannerActivity) // part3 label_distance1.text = String.format("%.2f", Math.pow(10.0, (((-20 - scanResult.level).toDouble())/20)))//Math.pow(10.0, ((-20 - scanResult.level.toDouble()) / 20)).toString() label_distance1.textSize = 14F label_distance1.layoutParams = TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT,1F) label_distance1.setPadding(0,0,20,0) label_distance1.setTypeface(null, Typeface.BOLD) tr_head1.addView(label_distance1) tr_head1.setBackgroundColor(Color.LTGRAY) tr_head1.setPadding(0,10,0,10) // 仅修改此处的xdlist变量,将行添加到不同的TableLayout中 xdlist!!.addView(tr_head1, TableLayout.LayoutParams( TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT ))
内容的提问来源于stack exchange,提问作者kaan kaya
相关产品推荐
相关产品推荐

