android无法获取视图位置坐标

时间:2012-11-16 09:36:33

标签: android position

我尝试使用textViewgetTop()方法获得getLeft()的位置,但它们总是返回0.我从onCreate()调用此方法

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView textView = (TextView) findViewById(R.id.hello);

    int top = textView.getLeft();
    int left = textView.getLeft();
    int height = textView.getHeight();

    Log.i("top", "top = " + top);
    Log.i("left", "left = " + left);
    Log.i("height", "height = " + height);

3 个答案:

答案 0 :(得分:2)

我找到了答案。只需使用getViewTreeObserver().addOnGlobalLayoutListener并在此方法中调用getLeft,getTop等。

答案 1 :(得分:1)

此时尚未看到textview。您需要在活动的生命周期中将那些稍后调用(请参阅下面的文档)。

引用 lifecycle documentation

  

一旦onCreate()完成执行,系统就会调用onStart()   和onResume()方法快速连续。你的活动从未   驻留在“已创建”或“已启动”状态。从技术上讲,这项活动   调用onStart()时,对用户可见,但onResume()   快速跟进并且活动保持在恢复状态直到   发生了一些改变

的事情

Some image

答案 2 :(得分:1)

布局传递完成后,将触发布局侦听器。它与特定的活动生命周期无关,因此您必须在布局过程中添加观察者。

    view.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener()
            {
                @Override
                public void onGlobalLayout()
                {
                    // Now you may get the left/top/etc. 
                    getCoordsFromView(view);
                    // Optionally remove the listener so future layouts don't change the value
                    view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                }
            });