运行时调整布局参数

gor*_*nwd 4 android

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

问题是getWidth只会在第一次绘制布局后返回一个有效值,我不确定是否有任何可用于执行此操作的片段覆盖.例如,调用onCreateView或onStart时,不确定视图的实际宽度.

那么有没有一种直接的方法来实现它,或者我将不得不继承视图并覆盖onLayout或onMeasure?

Bri*_*uis 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);
    }
}
Run Code Online (Sandbox Code Playgroud)