如何在TableLayout中临时隐藏行?删除与设高度为0方案均无效
解决TableLayout临时隐藏TableRow的正确方案
我太懂你的困扰了——不想删除行(毕竟之后还要恢复显示),设行高为0又因为子View的padding、最小高度这类属性,导致还能看到残留内容,确实闹心。给你推荐最靠谱的做法:直接给目标TableRow设置View.GONE的可见性,这会让它完全从布局中消失,既不会被移除,也不会占据任何空间。
具体操作步骤:
给第二行的TableRow添加唯一ID
在你的布局XML里,给需要隐藏的TableRow加上ID,方便代码中精准获取:<TableLayout ...> <TableRow> <!-- 第一行内容 --> </TableRow> <TableRow android:id="@+id/second_row"> <!-- 第二行内容 --> </TableRow> <TableRow> <!-- 第三行内容 --> </TableRow> </TableLayout>在代码中控制可见性
获取到这个TableRow实例后,在进度完成前设置为GONE,完成后切换回VISIBLE即可:// 获取目标行 TableRow secondRow = findViewById(R.id.second_row); // 进度未完成时隐藏该行 secondRow.setVisibility(View.GONE); // 进度完成后恢复显示 // secondRow.setVisibility(View.VISIBLE);
为什么这个方案比你之前的尝试更有效?
- 对比删除行:
View.GONE只是临时隐藏,TableRow仍然存在于布局结构中,后续恢复只需要改回VISIBLE,不需要重新创建或添加行,省心太多。 - 对比设置行高为0:TableRow的子View可能自带
minHeight、padding或者其他布局参数,就算行高设为0,子View的这些属性还是会让它显示一部分。而GONE会让整个TableRow及其内部所有View都完全脱离布局计算,彻底看不见也不占空间。
额外小提示:区分View.GONE和View.INVISIBLE
View.GONE:视图完全消失,不占据任何布局空间,相当于从布局中“临时移除”但实际还在结构里。View.INVISIBLE:视图不可见,但仍会占据原来的布局空间。
你的需求是让行完全从视图中消失,所以选View.GONE就对了。
如果你的TableRow是动态创建的,只需要在创建时保存它的实例引用,之后同样调用setVisibility()方法就能控制显示隐藏啦。
内容的提问来源于stack exchange,提问作者Tomáš Zato
相关产品推荐
相关产品推荐

