动态地将表格单元格跨行延伸以适合其内容

时间:2019-04-17 20:02:48

标签: android html css

这是一个用于将报告打印到色带打印机(即,纸张较窄的打印机)的Android应用。要正确格式化报告,我需要使用以下布局规则生成表格:

  1. 表的宽度和每列的宽度是静态的。
  2. 每个单元格的左边缘都与其列的左边缘对齐,除外:
  3. 如果单元格的内容太宽而无法满足单元格的最小宽度,则该单元格将占据表格的整行,而该行中的其他单元格将被向下推。

示例:

Table where 2nd row's content spans two rows of the table. Cell B1 consumes an entire row, and cells B2 and B3 have been pushed down one row.

对于它的价值,我希望如果发生此类 溢出,它将出现在第1列或最后一列中(不太可能)。

该解决方案可以在WebView或Android View的屏幕外树中使用HTML + CSS。在这两种情况下,我所需要做的就是获取可发送到打印机的位图。 (我知道我可以使用WebView做到这一点,而且我相信我也可以使用Views树来做到这一点。)但是,我不相信HTML + CSS 任何Android容器小部件提供了我正在寻找的布局和大小调整策略。有人知道吗?

1 个答案:

答案 0 :(得分:1)

对于它的价值,我发现我可以使用屏幕外的Android小部件树来做到这一点。

解决方案的高级描述:

我从一个外部容器(例如,将LinearLayout的方向设置为VERTICAL)开始,其外部子级最初都是水平的LinearLayout,其中包含表的“单元格”,而这些单元格最初都是TextViews

我在外部容器上调用draw()。这会将表格中的每个TextView布置在其默认位置(即,作为外部容器中一行中的“单元格”。)在完成初始布局之后,我需要执行以下操作:

  • 在容器的每一行中查找TextView,然后对每一行调用getLineCount()
  • 如果getLineCount()返回一个值> 1,那么我从其行中删除该TextView并将其添加为外部容器的子级-即,使其自身占据一整行。我还在其原始行的旧位置填充了Space,该宽度与TextView原来的宽度相同。还需要调整TextView的大小以填充其在容器中的行。
  • 最后,如果在此过程中移动了任何TextView,我将再次调用draw()以将重新排列的表格绘制到Canvas上,从中可以复制位图。

我意识到这有点含糊。如果我有时间从解决方案中剥离任何专有代码,请在此处发布。

相关问题