我开发了自定义复合视图,扩展了FrameLayout
并包含了几个ui元素。
测量完所有孩子后,我想调整一些元素的大小,并根据其他元素大小设置填充。
据我所知,在致电onMeasure
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
正确的地方是onMeasure
onMeasure
onLayout
onMeasure
onLayout
onMeasure
onLayout
它工作正常。布局改变后,它再次测量所有内容。
但在浏览ViewPager中的页面后,我只返回包含此视图的片段
onMeasure
被召唤。因此,调整大小和填充不会设置为某些元素。
在这种情况下,onLayout
之后为什么不调用{{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);
}