代码之家  ›  专栏  ›  技术社区  ›  aiueoH

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

  •  0
  • aiueoH  · 技术社区  · 8 年前

    我在自定义视图中编写了如下代码。

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

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

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

    谢谢

    1 回复  |  直到 8 年前
        1
  •  2
  •   Alex Hong    8 年前

    当您设置 LayoutParams 对于子视图,其父视图将再次执行度量阶段和布局阶段。

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

    获取新信息 布局参数 ,您应该发布这样的消息

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