现在的位置: 首页 > 综合 > 正文

在android中测量控件长宽的方法

2013年10月18日 ⁄ 综合 ⁄ 共 960字 ⁄ 字号 评论关闭

在Android中,有时需要对控件进行测量,得到的控件宽度和高度可以用来做一些计算。在需要自适应屏幕的情况下,这种计算就显得特别重要。另一方面,由于需求的原因,希望一进入界面后,就能得到控件的宽度和高度。

但是在onCreate()方法中是得不到控件的宽高的,不论是getWidth()还是getMeasuredWidth(),返回的都是0。

原因是因为当OnCreate函数发生时,只是提供了数据初始化的机会,此时还没有正式绘制图形。而绘制图形在OnDraw()中进行。容易想到的办法是:希望能在程序刚刚测量好某个指定控件进行绘制前,拿到它的宽度和高度立刻进行计算或数据初始化。这就需要有一个方法来监听到这个事件的发生。Android提供了这样的机制,利用View类中的getViewTreeObserver()方法,可以获取到指定View的ViewTreeObserver对象,在绘制控件前的一刹那进行回调,这样速度上又不耽误,得到的数据由是准确的。

 通过ViewTreeObserver类

http://developer.android.com/reference/android/view/ViewTreeObserver.html

		ViewTreeObserver mViewTreeObserve=view.getViewTreeObserver();
		mViewTreeObserve.addOnPreDrawListener(new OnPreDrawListener(){
			public boolean onPreDraw(){
				if(!hasMeasured){
					int width=view.getMeasuredWidth();//or int width=view.getWidth();
                                        int height=view.getMeasuredHeight();//or int height=view.getHeight();
					hasMeasured=true;
				}
				return true;
			}
			
		});
	}

这个方法中需要有hasMeasured标记,防止方法被多次调用。getWidth()和getMeasuredWidth()方法返回像素单位,并且值相同。

请注意,getWidth()和getMeasuredWidth()方法是有区别的。

【上篇】
【下篇】

抱歉!评论已关闭.