博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 中获取某个控件的宽高
阅读量:381 次
发布时间:2019-03-05

本文共 1478 字,大约阅读时间需要 4 分钟。

前言

有好多朋友直接在onCreate里面调用getWidth、getMeasuredWidth来获取控件的高和宽,结果呢?始终都是0!为什么呢?因为我们的控件是画出来的,当我们在执行onCreate()的方法的时候,我们的控件还没有画出来,只有执行完onCreate()方法,我们定义的控件才会被度量(measure),所以是0.

办法

既然不能直接在onCreate里面调用getWidth、getMeasuredWidth方法,那怎么获取我们控件的高和宽呢?

这里有3个办法,这里我就简单来说一下

第一种:

int w = View.MeasureSpec.makeMeasureSpec(0,                  View.MeasureSpec.UNSPECIFIED);          int h = View.MeasureSpec.makeMeasureSpec(0,                  View.MeasureSpec.UNSPECIFIED);          imageView.measure(w, h);          int height = imageView.getMeasuredHeight();          int width = imageView.getMeasuredWidth();

这种方法会调用3次onMeasure()方法

第二种:

ViewTreeObserver vto = imageView.getViewTreeObserver();           vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {               public boolean onPreDraw() {                   vto.removeOnPreDrawListener(this);                  int height = imageView.getMeasuredHeight();                   int width = imageView.getMeasuredWidth();                   return true;               }           });

种方法会调两次onMeasure()方法

第三种:

ViewTreeObserver vto = imageView.getViewTreeObserver();             vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {               @Override                 public void onGlobalLayout() {                   imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this);                   imageView.getHeight();                  imageView.getWidth();              }             });

同方法二

选择

具体用哪个看实际项目吧,推荐使用方法三

转载地址:http://cqnwz.baihongyu.com/

你可能感兴趣的文章