这篇文章将为大家详细讲解有关android怎么获取视图在布局中的高度与宽度,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>实现方法强>
<强>一、使用视图。测量测量视图强>
该方法测量的宽度和高度可能与视图绘制完成后的真实的宽度和高度不一致。
int width =, View.MeasureSpec.makeMeasureSpec (0, View.MeasureSpec.UNSPECIFIED才能); int height =, View.MeasureSpec.makeMeasureSpec (0, View.MeasureSpec.UNSPECIFIED才能); view.measure(宽度,高度); view.getMeasuredWidth();,//,获取宽度 view.getMeasuredHeight();,//,获取高度
<强>二、使用ViewTreeObserver。> view.getViewTreeObserver () .addOnPreDrawListener ( new 才能;ViewTreeObserver.OnPreDrawListener (), { , ,@Override ,public boolean  onPreDraw (), { .removeOnPreDrawListener view.getViewTreeObserver才能()(); view.getWidth才能();,//,获取宽度 view.getHeight才能();,//,获取高度 return 才能;真实; ,} });
<强>三、使用ViewTreeObserver。> view.getViewTreeObserver () .addOnGlobalLayoutListener ( new 才能;ViewTreeObserver.OnGlobalLayoutListener (), { , ,@Override ,public void  onGlobalLayout (), { if 才能;(Build.VERSION.SDK_INT 祝辞=,16),{ ,,view.getViewTreeObserver () ,,,,.removeOnGlobalLayoutListener(这个); ,,} else {才能 ,,view.getViewTreeObserver () ,,,,.removeGlobalOnLayoutListener(这个); ,,} view.getWidth才能();,//,获取宽度 view.getHeight才能();,//,获取高度 ,} });
<强>四,重的> @Override写视图 protected void  onSizeChanged (int w, int h, int oldw,, int oldh), { ,super.onSizeChanged (h, w,还以为,oldw, oldh); , ,view.getWidth();,//,获取宽度 ,view.getHeight();,//,获取高度 }
<强>五,重的> @Override写视图 protected void  onLayout (boolean 改变,,int l, int t, int r, int b), { ,super.onLayout(改变,,,,,,,,b); , ,view.getWidth();,//,获取宽度 ,view.getHeight();,//,获取高度 }
<强>六、使用视图。OnLayoutChangeListener监听事件(API祝辞=11)
强>
在视图的布局改变时调用该事件,会被多次调用,因此需要在获取到视图的宽度和高度后执行删除方法移除该监听事件。
view.addOnLayoutChangeListener ( new 才能;View.OnLayoutChangeListener (), { , ,@Override ,public void  onLayoutChange (View v, int l, int t, int r, int b, ,,int oldL, int oldT,, int oldR,, int oldB), { view.removeOnLayoutChangeListener才能(这个); view.getWidth才能();,//,获取宽度 view.getHeight才能();,//,获取高度 ,,} });
<强>七、使用View.post()方法强>
Runnable对象中的方法会在视图的测量、布局等事件完成后触发。
UI事件队列会按顺序处理事件,在setContentView()被调用后,事件队列中会包含一个要求重新布局的信息,所以任何帖子到队列中的Runnable对象都会在布局发生变化后执行。
该方法只会执行一次,且逻辑简单,建议使用。
View.post (new Runnable (), { , ,@Override ,public void  run (), { view.getWidth才能();,//,获取宽度 view.getHeight才能();,//,获取高度 ,} });
以上为转载内容,个人学习收藏记录
<强>下面是自己的学习记录。强>
首先第一个方法,以前用过,确实不准确,猜测是应该是因为参数没有用好,因为参数只使用不明未指定的测量方式,一般像Wrap_Content,才是该测量方式。
这里贴一个比较好用的,AndroidUtilCode收藏的方法。
, public static int [], measureView (final View 视图),{ ViewGroup.LayoutParams 才能;lp =, view.getLayoutParams (); if 才能;(lp ==, null), { ,,lp =, new ViewGroup.LayoutParams ( ,,,,ViewGroup.LayoutParams.MATCH_PARENT, ,,,ViewGroup.LayoutParams.WRAP_CONTENT ,,); ,,} int 才能;widthSpec =, ViewGroup.getChildMeasureSpec (0, 0, lp.width); int 才能;lpHeight =, lp.height; int 才能;heightSpec; if 才能;(lpHeight 祝辞,0),{ ,,heightSpec =, View.MeasureSpec.makeMeasureSpec (View.MeasureSpec.EXACTLY lpHeight也); ,,},{else ,,heightSpec =, View.MeasureSpec.makeMeasureSpec (0,, View.MeasureSpec.UNSPECIFIED); ,,} view.measure才能(widthSpec, heightSpec); return 才能;new  int [] {view.getMeasuredWidth (),, view.getMeasuredHeight ()}; nullandroid怎么获取视图在布局中的高度与宽度