gpt4 book ai didi

android - 跨行动态拉伸(stretch)表格单元格以适合其内容

转载 作者:太空宇宙 更新时间:2023-11-04 06:18:29 25 4
gpt4 key购买 nike

这适用于将报告打印到色带打印机(即窄纸打印机)的 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.

就其值(value)而言,我希望如果这样的溢出确实发生,它将在第 1 列或(不太可能)在最后一列。

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

最佳答案

就其值(value)而言,我发现我可以使用 Android 小部件的屏幕外树来做到这一点。

解决方案的高级描述:

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

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

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

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

关于android - 跨行动态拉伸(stretch)表格单元格以适合其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55735177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com