在 Android 中设置布局参数后何时更新视图

When will update view after set layout parameter in Android

我在自定义视图中写了一些代码,如下所示。

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) getLayoutParams();
lp.setMargins(100, 100, 0 ,0);
lp.width = 200;
lp.height = 200;

我在最后一行使用断点,发现 getX() 的值在求值表达式中仍然为 0 window。

我想知道设置布局参数后什么时候更新getX()的值,应该是100。

谢谢。

当您为子视图设置LayoutParams时,其父视图将再次进行测量阶段和布局阶段。

您的代码 setLayoutParams() 将被添加到 MessageQueue 中执行。你在这里使用断点不会看到任何东西。

要获得新的LayoutParams,您应该post这样的消息

yourView.post(new Runnable() {
            @Override
            public void run() {
                v.getX();
            }
        });

另一种方式:

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                // get your view size here
            }
        });

如果您想在视图更新 LayoutParams 时查看,请在自定义视图的 layout() 方法中插入日志

@Override
public void layout(int l, int t, int r, int b) {
    Log.d("alex.hong", "before X = " + getX());

    super.layout(l, t, r, b);

    Log.d("alex.hong", "current X = " + getX());
}