You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TableLayout中wrap_content不生效:动态添加的单元格文本无法换行

解决TableLayout动态添加TextView文本不自动换行的问题

你遇到的问题是因为TextView的布局参数和换行属性没配置到位,以下是修复方案:

修改后的Java代码

tableLayout = findViewById(R.id.TableTheOpenQuestion);
TableRow tr = new TableRow(dContext);
TableRow.LayoutParams params = new TableRow.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT, 1);
params.setMargins(12, 0, 12, 0);
tr.setLayoutParams(params);

// 修改单元格布局参数:宽度设为MATCH_PARENT,让TextView占满可用空间
TableRow.LayoutParams cellParams = new TableRow.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT);

TextView tv = new TextView(dContext);
tv.setLayoutParams(cellParams);
tv.setPadding(5, 10, 10, 10);
// 允许文本多行显示
tv.setSingleLine(false);
// 取消文本省略(如果不需要省略号的话)
tv.setEllipsize(null);
// 可选:设置高质量换行策略,优化长文本换行效果
tv.setBreakStrategy(TextView.BREAK_STRATEGY_HIGH_QUALITY);
tv.setText("A very long text.A very long text.A very long text.A very long text.A very long text.A very long text.A very long text.A very long text.");
tr.addView(tv);

tableLayout.addView(tr);

关键修改点说明

  • 单元格宽度设为MATCH_PARENT:原来的WRAP_CONTENT会让TextView无限横向延伸,不会触发换行,改为MATCH_PARENT后,TextView会受限于TableRow的宽度,达到换行条件。
  • 启用多行显示:setSingleLine(false)明确告诉TextView可以显示多行,默认情况下TextView可能是单行模式。
  • TableLayout的stretchColumns="*":你已经设置了这个属性,它会让TableLayout的列自动拉伸填充可用宽度,配合TextView的宽度设置就能完美实现文本换行。

内容的提问来源于stack exchange,提问作者mvdn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 18:52:20