Android 获得控件的高度
来源:互联网 发布:ipv6商业应用网络 编辑:程序博客网 时间:2024/05/16 01:39
在Activity内想要通过View.getWidth()或者View.getHeight()获取某个控件的宽度和高度,在onCreate或者onResume调用返回只会获得0。
总结:方法一比方法二和方法三多调用了一次onMeasure(int,int)方法,所以效率上较低,一般采取方法二和方法三。同时要记得调用removeOnPreDrawListener和removeGlobalOnLayoutListener,不然的话会多次调用onPreDraw和onGlobalLayout。
这是因为控件要获取自己的高度和宽度,是在onMeasure()调用之后才能获得的。而Activity的生命周期方法onCreate/onResume等,都是在onMeasure调用之前调用的。那怎么才能获取View的正确的高度和宽度呢?有以下几种方法:
1、调用onMeasure(int,int)方法,然后再getWidth()和getHeight():
//------------------------------------------------方法一
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);
2、在onDraw之前,调用getWidht()和getHeight()获取高度和宽度,用到了OnPreDrawListener:
ViewTreeObserver vto = imageView.getViewTreeObserver(); vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { vto.removeOnPreDrawListner(this); int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); textView.append("\n"+height+","+width); return true; } });
3、除了OnPreDrawListener之外,还可以增加全局layout变化的监听器,一样可以达到统一的效果。
ViewTreeObserver vto2 = imageView.getViewTreeObserver(); vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { vto2.removeGlobalOnLayoutListener(this); textView.append("\n\n"+imageView.getHeight()+","+imageView.getWidth()); } });
总结:方法一比方法二和方法三多调用了一次onMeasure(int,int)方法,所以效率上较低,一般采取方法二和方法三。同时要记得调用removeOnPreDrawListener和removeGlobalOnLayoutListener,不然的话会多次调用onPreDraw和onGlobalLayout。
0 0
- Android 获得控件的高度
- 获得控件的高度
- Android获得标题栏,状态栏,控件,屏幕高度
- Android获得标题栏和状态栏高度,以及立即获取控件的高度
- Android获得标题栏和状态栏高度,以及立即获取控件的高度
- android 获得View的高度
- 获得控件高度
- Android中在OnCreate时获得控件高度
- Android中在OnCreate时获得控件高度
- Android中oncreate中如何获得控件高度或宽度?
- Android中oncreate中如何获得控件高度或宽度?
- Android 获得控件坐标及获取状态栏高度
- Android获得屏幕的密度,宽度,高度
- Android 获得状态栏的高度
- Android中获得屏幕的宽高度
- Android获取控件的高度
- android得到控件的高度
- Android获得statusBar高度
- DllImport调用系统DLL的方法
- Linux系统字符集配置
- php memcache单例
- ZOJ3818--Pretty Poem(暴力)
- 基于boost.asio的ECHO服务器
- Android 获得控件的高度
- android异常Unable to instantiate activity ComponentInfo解决方法
- IP地址转整数
- uvalive4835(模拟)
- Qt QWaitCondition的应用
- Java中的静态绑定和动态绑定
- synchronized初步
- Android_布局优化
- 使用定时器去抖