3

我已经实现了一个扩展 ViewGroup 的自定义布局。在其 onLayout() 方法中,我对所有孩子进行了循环:我将它们添加到布局中,测量它们,然后对它们进行布局。它工作得很好。

但现在我希望我的孩子拥有动态内容。因此,我为每个孩子的视图持有者添加了一个处理程序和一个可运行对象(我的布局填充了一个适配器)。该可运行文件旨在每 10 秒更新一次文本视图。会发生什么是 TextView 被截断。我发现它实际上占用了它设置的第一个字符串的宽度,并且永远不会重新测量或重新布局。我决定让我的自定义布局扩展 FrameLayout。如果在我的 onLayout() 方法中调用 super.onLayout(),一切正常。每次通过 Runnable 更新子项中的 TextView 时,都会在我的自定义布局的 onLayout 方法上回调。

最大的问题是为什么?扩展FrameLayout是不够的,还得调用super.onLayout()。我已经检查了这种方法的代码,但无法弄清楚它是如何使它工作的。由于根据文档,布局是自上而下的一次传递,为什么调用此方法会使我的自定义布局在每次更新子项时重新布局?请注意,我试图对我的孩子调用 requestLayout() 和 invalidate() 无济于事。

谢谢你读我。如果不够清楚,我可以提供代码。

4

0 回答 0