2013-01-25 60 views
0

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

编辑
在我的工作,一个情况是这样的: 的父LinearLayout中观点可能有数百个孩子视图。为了更好的表现,我的解决方案就像这样:像懒加载。父视图绘制子视图有效

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


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

+0

读从这里http://developer.android.com/reference/android/ MeasureSpec.UNSPECIFIED view/View.MeasureSpec.html –

回答

0

父LinearLayout视图可能有数百个子视图。为了获得更好的性能,我的解决方案如下:像懒加载。

LinearLayout与(可能)几百子视图那种违背更好的性能。我认为你在寻找的是一个ListView与无尽的适配器(一个简单的谷歌搜索将显示如何实现它,而不是那么困难)。只要到达最后一个加载的元素,该适配器就会开始加载视图(加载新视图时显示加载视图)。

如果你仍然想使用LinearLayout

如果你只是想使LinearLayout填满屏幕的内容时,它的第一个规定,您可以在onCreate方法张贴在您的视图之一Runnable (如果这是您首先填充LinearLayout的地方)。在那Runnable找到LinearLayout的高度,并将其与当前现在的孩子的高度相比较。如果组合子高度较小,则高度将增加更多视图以进行补偿。

如果LinearLayout处于ScrollView,你要添加其他孩子当加载视图变得可见然后监视ScrollView的滚动和当加载视图变得可见添加新的儿童。通过检查用户滚动的量与当前存在的LinearLayout儿童的总高度相比,看到加载视图何时变得可见。

初始响应:

你的问题有点含糊关于你想知道什么。如果你有特定的问题,你应该从那开始。

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

请不要让自己陷入这样的场景。如果内存不足(即所有这些视图将保留在内存中),那么这些视图数量太大会导致性能不佳甚至应用程序崩溃。

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

每个ViewViewGrouponMeasure方法来衡量本身和它的孩子(如果可用)。该LinearLayout将有一个名为其onMeasure方法,在这种方法中,将测量它的孩子(与措施method)给他们,他们应该多大一些建议(在LinearLayout接收它应该从它的父有多大的一些建议)。如果您想了解如何完成此操作,请查看LinearLayout的源代码。

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

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

+0

谢谢你的回答。我想知道android如何处理这个细节。我看到LinearLayout源代码,找不到计算逻辑。 – boiledwater

+0

@boiledwater如果你看看源代码的'LinearLayout'你会看到'onMeasure' ** **如何测量它的chidlren。该'onMeasure'回调将通过该系统,只要有需要显示/重新显示视图层次调用。 – Luksprog

+0

请参阅编辑。 – boiledwater

0

具有u使用滚动条顶层的LinearLayout视图中,并在该布局的简单添加子视图...