1。发现问题
在做一个GPS相关的应用,过程中需要测量地球控件的大小尺寸,通过调用getWidth、getMeasuredWidth等方法都试过了,发现得到的结果都是0。反复检查都没发现错误,为什么呢?
2。深究原因
发现了问题,当然就要先分析原因了。经过一翻了解,原来在onCreate中,我们的控件其实还并没有画好,换句话说,等onCreate方法执行完了,我们定义的控件才会被度量(measure),所以我们在onCreate方法里面通过view.getWidth()获取控件的宽度肯定是0。
3。测试
针对这个问题,在网上有很多的解决方法,想真正了解,自己当然也要试上一试,才知道效果是怎样,那种方法更好。下面上代码
布局很简单,就一个ImageView:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/img"
android:layout_width="300dp"
android:layout_height="300dp"
android:src="@drawable/bbb"
android:background="#000000"
android:layout_centerInParent="true"/>
</RelativeLayout>
下面是用于测试的代码,其中有几个方法,分别测试图片大小,和1~5种方法测试ImageView控件的大小:
package com.wuxianxi.test;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.ImageView;
public class MainActivity extends ActionBarActivity {
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
img = (ImageView) findViewById(R.id.img);
getImageSize();
getSizeOne();
getSizeTwo();
getSizeThree();
getSizeFour();
getSizeFive();
}
private