运行时调整布局参数

4
在片段的视图中,我想根据包含视图的宽度调整其中一个子视图的布局参数,其布局参数设置为match_parent。我需要做的是调用父视图的getWidth/getHeight,然后设置子视图的ViewGroup.LayoutParameters等。
问题在于,getWidth只有在第一次绘制布局后才会返回有效值,我不确定是否有任何片段覆盖可以用于此。例如,当onCreateView或onStart被调用时,视图的实际宽度尚未确定。
那么,有没有直接的方法来实现这一点,或者我将不得不子类化一个视图并覆盖onLayout或onMeasure?
1个回答

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);
    }
}

哇!我显然错过了这个,它看起来就是我需要的。谢谢! - gordonwd
1
不要忘记使用 vto.removeGlobalOnLayoutListener(this) 移除全局布局侦听器。 - Anukool

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接