线性布局完成绘制后创建 PDF

Create a PDF after linear layout is done drawing

我正在尝试创建具有 table 布局的嵌套线性布局的 PDF。我的问题是我最初的尝试导致在没有完整视图的情况下绘制文件。

为了解决这个问题,我决定只在视图加载完成后写入文件,并且我尝试使用 ViewTreeObserver.globalOnLayoutListener 监听事件,但它从未被触发。所以我决定使用 View.post() 但它似乎也不起作用。 我已经等了 4 分钟,认为可能需要一段时间才能绘制,因为布局文件很大,但侦听器和后来的可运行程序从未被调用过。我使用两个断点和 logcat.

验证了事实

我哪里错了?

所以我想通了,并不是我在布局渲染完成之前调用绘图,我只是想使用像素太多的 xxhdpi 屏幕在 A4 PostScript pt 大小的页面上绘图适合尺寸。为了解决这个问题,我使用 px 值而不是 dps 作为我的视图尺寸,并且我还将布局大小设置为与页面大小相同,以确保内容完美契合。

我设法通过调用 measure(width, height) 强制视图重新测量自身及其受提供尺寸约束的子项的大小来更改布局的视图尺寸,然后 layout(left, top, right, bottom) 强制它在由传递的坐标创建的边界内呈现自己及其子项。

最好的一点是测量和布局是同步的,因此可以保证在尝试对视图执行任何操作之前视图已准备就绪。