怎么在程序开始就获取组件的位置

如何在程序开始就获取组件的位置
因为需要开始初始化的时候就需要获得组件的位置,使用getLeft()等方法可以获得,但是必须在界面绘制完成后,也就是必须在onCreate()方法之后使用,故将获取的代码放在onResume()方法中调用,但是即使这样也不行,这样要如何解决,附上测试代码
TextActivity.java
Java code

public class TextActivity extends Activity {
    Button but;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        but = (Button) findViewById(R.id.button1);
        but.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                // 此处点击可以获取到,但是放在外面就获取不到
                Log.v("zing", "but.getLeft() =" + but.getLeft());
            }
        });
    }
    
    @Override
    protected void onResume()
    {
// 这里第一次运行程序会执行一次,而第二次开始只执行一次
        Log.v("zing", "onResume");
        Log.v("zing", "but.getLeft() =" + but.getLeft());
        super.onResume();
    }
}



main.xml

XML code

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="Button" />
    </RelativeLayout>

</LinearLayout>



------解决方案--------------------
无法在onCreate函数中直接获取view的尺寸,因为此时界面的layout还没有初始化,通过注册需要监听的view的viewTreeObserver来获取其尺寸,回调函数onGlobalLayout被调用的时候表明相应的view已经初始化了,使用如下方法:
Java code

ViewTreeObserver viewTreeObserver = view.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
  viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
      viewWidth = mediaGallery.getWidth();
      viewHeight = mediaGallery.getHeight();
    }
  });
}