子视图的坐标何时生效?

时间:2016-01-12 16:50:45

标签: android relativelayout

我有一个RelativeLayout有很多子视图,我想在活动开始后计算其中一个(相对于父容器)的位置。

我的问题是,当我使用视图填充布局时,我无法获得任何坐标,这发生在我的活动的onStart方法中。特别是,我尝试了similar question中提到的每一个食谱但没有成功;所有这些方法都只返回零。

然而,如果我稍后重复计算(即在按钮处理程序中),他们会计算正确的位置。

所以我的假设是onStart不是计算位置的好地方,因为还没有准备好。但哪个地方会更好?根据{{​​3}},onStart是在向用户显示活动之前的最后一次调用。我尝试将我的数学转移到onResume,但这没有用。

1 个答案:

答案 0 :(得分:4)

您可以通过这种方式确保视图具有有效坐标:

parentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        // really important! elsewhere this method will be called continously
        parentView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

        // do your job
    }
});