2012-02-05 41 views
4

在片段视图中,我想根据包含视图的宽度调整其中一个子视图的布局参数,其布局参数设置为match_parent。我需要做的是调用getWidth/getHeight为父,然后设置子视图的ViewGroup.LayoutParameters等运行时调整布局参数

问题是getWidth将只返回一个有效的值后,第一次绘制布局我不确定是否有任何片段覆盖可以用来做这件事。例如,当onCreateView或onStart被调用时,视图的实际宽度不确定。所以有直接的方法来实现这个,或者我将不得不继承一个视图并覆盖onLayout或onMeasure?

回答

8

您可以在视图树上设置一个全局布局侦听器,并在其中进行处理。

final ViewTreeObserver vto = myView.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

    public void onGlobalLayout() { 
     // do layout tweaking based on measurements 

     // remove the listener... or we'll be doing this a lot. 
     vto.removeGlobalOnLayoutListener(this); 
    } 
} 
+0

哇!我显然错过了这个,看起来正是我需要的。谢谢! – gordonwd 2012-02-05 16:19:27

+0

太好了,祝你好运。 – 2012-02-05 16:52:18

+1

不要忘记使用vto.removeGlobalOnLayoutListener(this)删除全局布局侦听器; – Anukool 2013-09-05 06:34:51