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