Android中获取控件的宽高

发布时间:2014-10-23 23:23:45
来源:分享查询网

1.在android中,如果在onCreate()里面获取控件的高度是0,这是为什么呢? 1)首先我们自己写一个控件,这个控件非常简单: public class MyImageView extends ImageView {     public MyImageView(Context context, AttributeSet attrs) {      super(context, attrs);    }     public MyImageView(Context context) {    super(context);      }        @Override   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);         System.out.println(System.currentTimeMillis() + "onMeasure 被调用了");   }              @Override   protected void onDraw(Canvas canvas) {        super.onDraw(canvas);         System.out.println( System.currentTimeMillis() + "onDraw 被调用了" );   }  }   2).布局文件: <andriod.test.activity.MyImageView         android:id="@+id/test_img"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:src="@drawable/test_png /> 3).测试的Activity的onCreate(): a)未修改之前的 @Override   public void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.main);               System.out.println("执行完毕.."+System.currentTimeMillis());   }  4)查看运行的结果: a)执行完毕会首先被调用, b)接着调用两次“onMeasure 被调用了” c)最后调用“onDraw 被调用了” 说明等onCreate方法执行完了,我们定义的控件才会被度量(measure)。这样在onCreate方法里面通过view.getHeight()获取控件的高度或者宽度肯定是0。因为它自己还没有被度量,也就是说他自己都不知道自己有多高,而你这时候去获取它的尺寸,肯定是不行的。   2.解决办法: 在测试Activity的onCreate()方法里面添加红色字体处的代码即可。 @Override   public void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.main);               System.out.println("执行完毕.."+System.currentTimeMillis());       //获取控件的宽高     final MyImageView  imageview = (MyImageView)findViewById(R.id.test_img);     ViewTreeObserver vto2 = imageview.getViewTreeObserver();        vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {           @Override             public void onGlobalLayout() {                   imageview.getViewTreeObserver().removeGlobalOnLayoutListener(this);                     resultTv.append("\r\n 图像的高度 : ="+imageview.getHeight()+", 图像的宽度:=" + imageview.getWidth());            }         });    }    另外还有其它的方式获取控件的宽高,可查看以下博客: http://blog.csdn.net/johnny901114/article/details/7839512  

返回顶部
查看电脑版