Android—获取控件的高度
2015-09-09 21:32
309 查看
由于Android在onCreate()中,视图还在draw绘制的过程中,即,在onCreate()方法执行完后,控件的宽高才会被测量measure。所以在onCreate()方法里面通过view.getHeight()获取控件的高度或者宽度肯定是0。
因此,我们可以通过如下方法进行处理:
方法1:
方法2:
这个方法,我们需要注册一个ViewTreeObserver的监听回调,这个监听回调,就是专门监听绘图的,既然是监听绘图,那么我们自然可以获取测量值了,同时,我们在每次监听前remove前一次的监听,避免重复监听。
方法3:
这个方法于第2个方法基本相同,但他是全局的布局改变监听器,所以是最推荐使用的。
因此,我们可以通过如下方法进行处理:
方法1:
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();
方法2:
这个方法,我们需要注册一个ViewTreeObserver的监听回调,这个监听回调,就是专门监听绘图的,既然是监听绘图,那么我们自然可以获取测量值了,同时,我们在每次监听前remove前一次的监听,避免重复监听。
ViewTreeObserver viewTreeObserver = imageView.getViewTreeObserver(); viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { viewTreeObserver.removeOnPreDrawListener(this); int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); return true; } });
方法3:
这个方法于第2个方法基本相同,但他是全局的布局改变监听器,所以是最推荐使用的。
ViewTreeObserver viewTreeObserver = imageView.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); imageView.getHeight(); imageView.getWidth(); } });
相关文章推荐
- Android实例-操作sqlite数据之自建导航(XE8+小米2)
- Android菜鸟的启航
- Android绘制的一些总结onMeasure,onLayout,onDraw
- 0909Android基础安卓四大组件之Service
- Android VelocityTracker简介
- android多点触控统一的原理(使用 event.getAction()&MotionEvent.ACTION_MASK的原因)
- Android 编程下 Touch 事件的分发和消费机制
- Android 数据存储5种方式
- Android判断程序是前台还是后台
- Android多媒体——播放音频
- android AsyncTask详解
- Android四大组件---Service
- Android之VideoView播放视频
- android studio命令大全
- Android开发:在onTouchEvent中处理任意时间的长按事件
- Android视频播放手动切换和自动切换横竖屏冲突问题
- android待机添加电量小部件,点击位置信息图标,模式切换需要改为四种
- Android之SharedPreferences详解
- android学习笔记(20)数据流操作/文本的保存与查看
- Android 学习第6课,循环功能