///

一般的,view测量的方法:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ImageView imageView = (ImageView) findViewById(R.id.imageview); 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(); textView.append("\n"+height+","+width); System.out.println("执行完毕.."+System.currentTimeMillis()); } //------------------------------------------------方法一 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(); textView.append("\n"+height+","+width); //-----------------------------------------------方法二 ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); textView.append("\n"+height+","+width); return true; } }); //-----------------------------------------------方法三 ViewTreeObserver vto2 = imageView.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth()); } });


最近由于要做自定义view,需要测量view宽高,发现一个不错的api:

View.MeasureSpec.makeMeasureSpec(int,int)

参数1是一个数值,基于该数值计算

参数2是一个mode,指测量的方式,mode如下:

它有三种模式:
①、UNSPECIFIED(未指定),父元素部队自元素施加任何束缚,子元素可以得到任意想要的大小;
②、EXACTLY(完全),父元素决定自元素的确切大小,子元素将被限定在给定的边界里而忽略它本身大小;
③、AT_MOST(至多),子元素至多达到指定大小的值。


具体使用如下:

int w = View.MeasureSpec.makeMeasureSpec(SCREEN_W,View.MeasureSpec.AT_MOST); int h = View.MeasureSpec.makeMeasureSpec(SCREEN_H/2,View.MeasureSpec.AT_MOST); view.measure(w, h);LogUtil.showlog("w:" + w + ",h:" + h);

  1. intw=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
  2. inth=View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
  3. textView.measure(w,h);


///

参考:

http://blog.sina.com.cn/s/blog_4172d3d60101h15p.html

http://blog.csdn.net/listening_music/article/details/7210146

http://www.tuicool.com/articles/jiuqEr


更多相关文章

  1. android设置Spinner字体颜色,格式,大小
  2. cvc-complex-type.2.4.d: 发现了以元素 'd:skin' 开头的无效内容
  3. Android动态设置edittext的hint属性显示的提示文字大小
  4. Android6.0 Launcher3 修改app字体大小
  5. 调整android studio内存大小防止使用卡顿
  6. android 如何修改桌面默认图标的大小
  7. Android 最新获取手机内置存储大小,SD卡存储空间大小方法
  8. android获得手机屏幕大小

随机推荐

  1. Android开发中TextView文本过长滚动显示
  2. Android——初识OpenGL ES 2.0
  3. RestHttp
  4. android 按钮自定义
  5. Android开发周刊 第四期
  6. 【AS基础篇二:线性布局和相对布局的使用】
  7. 安卓 Android之开发简单小应用(一)
  8. Android联系人表结
  9. 安卓中contentDescription属性的作用详解
  10. Android图片自适应不同分辨率屏幕问题