在ViewPager中自定义ViewGroup(复合视图)onMeasure和onLayout调用

时间:2015-02-27 11:29:08

标签: android-layout android-view android-custom-view android-ui

我开发了自定义复合视图,扩展了FrameLayout并包含了几个ui元素。

测量完所有孩子后,我想调整一些元素的大小,并根据其他元素大小设置填充。

据我所知,在致电onMeasure

后,super.onMeasure(widthMeasureSpec, heightMeasureSpec);正确的地方是onMeasure onMeasure onLayout onMeasure onLayout
  1. 当应用首次打开或最小化并重新打开时,我会在日志中看到以下呼叫:
  2. onMeasure onLayout

    它工作正常。布局改变后,它再次测量所有内容。

    但在浏览ViewPager中的页面后,我只返回包含此视图的片段

    onMeasure

    被召唤。因此,调整大小和填充不会设置为某些元素。

    在这种情况下,onLayout之后为什么不调用{{1}}?如果只有在测量了其他元素后才知道需要的尺寸,我需要调整大小并设置填充视图吗?

1 个答案:

答案 0 :(得分:1)

我想我找到了解决方案。不确定它有多好。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    // views are measured. so needed views can be resized depending on other views
    resizeNeededViews()

    // measure everything another one time
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}