Android - 当View显示时需要回调

10

在Android中,是否有与Dialog.setOnShowListener()等价的方法适用于View类?

我需要它是因为当我在某个ViewGroup上添加一个View(例如foo)后的下一行代码中调用getViewLocationOnScreen时,我得到的位置是(0,0)。

我无法使用活动的任何生命周期方法,因为foo的添加是由用户操作(按下按钮)触发的。非常感谢您的帮助。提前致谢。

1个回答

21

你应该使用ViewTreeObserver:

someViewGroup.addView(foo)    

ViewTreeObserver vto = someViewGroup.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            ///getLocationOnScreen here

            ViewTreeObserver obs = someViewGroup.getViewTreeObserver();
            obs.removeGlobalOnLayoutListener(this);
        }
    });

@Zelleriation 你好,我尝试使用了你建议的技巧,但是有时在回调函数内我仍然会得到(0,0)位置,你知道这是为什么吗? - Vlad

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