android怎么获取视图在布局中的高度与宽度

  介绍

这篇文章将为大家详细讲解有关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 ()};   null

android怎么获取视图在布局中的高度与宽度