0

例如,顶级 LinearLayout 视图有 300 个子视图。但设备屏幕尺寸仅显示 11 个子视图一次。android如何计算一次可以显示多少个子视图?视图如何知道它将被绘制?

编辑
在我的工作中,这样的一种情况:父 LinearLayout 视图可能有数百个子视图。为了更好的性能,我的解决方案是这样的:likelazy load。

  1. List list = new ArrayList();//包含使用构造View对象的实体对象
  2. 默认加载 5 个子视图。
  3. 父 LinearLayout 视图最后一个子视图是自定义加载视图,我已经覆盖了它的 onDraw() 方法。如果加载视图是绘制,这意味着我需要获取下一个 5 子视图(从列表中获取下一个 5 对象,并创建相应的视图)。


我想知道android框架如何处理这种情况?

4

2 回答 2

0

一个父 LinearLayout 视图可能有数百个子视图。为了更好的性能,我的解决方案是这样的:likelazy load。

LinearLayout(可能)数百个子视图与更好的性能相矛盾。我认为您正在寻找的是ListView一个无尽的适配器(一个简单的谷歌搜索将显示如何实现它,而不是那么困难)。一旦您到达最后加载的元素,此适配器将开始加载视图(在加载新内容时显示加载视图)。

如果您仍想使用LinearLayout

如果您只想在LinearLayout第一次布局时填充屏幕的内容,您可以Runnable在方法中的一个视图上发布一个onCreate(如果这是您首先填充的地方LinearLayout)。在那里Runnable找到 的高度LinearLayout并将其与当前存在的孩子的组合高度进行比较。如果组合的子高度小于LinearLayout高度,则添加更多视图以进行补偿。

如果LinearLayout在 a 中ScrollView,并且您想在加载视图可见时添加其他子级,则监视 的滚动,ScrollView并在加载视图可见时添加新子级。通过检查用户滚动了多少与当前存在的LinearLayout.

初步反应:

关于您想知道的内容,您的问题有点模棱两可。如果你有一个特定的问题,你应该从那个开始。

例如,顶级 LinearLayout 视图有 300 个子视图。但设备屏幕尺寸仅显示 11 个子视图一次。

请不要让自己陷入这样的场景。如果你的内存用完,那么这个数量的视图会导致性能下降甚至应用程序崩溃(因为所有这些视图都将保存在内存中)。

android如何计算一次可以显示多少个子视图?

如果可用,每个ViewViewGroup都有onMeasure测量自身及其子级的方法。将调用LinearLayout它的onMeasure方法,并且在这个方法中它将测量它的孩子(使用 measure method)给他们一些关于他们应该有多大的建议(LinearLayout从它的父母那里收到一些关于它应该有多大的建议)。如果您想了解这是如何完成的,请查看LinearLayout.

视图如何知道它将被绘制?

我不明白你想知道什么。要在屏幕上绘制视图,onDraw将调用其方法。

于 2013-01-25T07:35:32.437 回答
0

您是否在顶级 LinearLayout 视图中使用滚动条并在该布局上添加子视图,这很简单......

于 2013-01-25T09:53:21.013 回答