Android 几种获得view的宽和高的方法

来源:互联网 发布:mysql自增id 编辑:程序博客网 时间:2024/04/28 06:13

在android开发中,我们如果在Activity中的oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高,其结果往往是0,并没得到相应的值。

这是为什么呢?

在调用oncreate()方法时,界面处于不可见状态,内存加载组件还没有绘制出来,你是无法获取他的尺寸。而View的getWidth()和getHeight()方法,都是获取view在界面布局中的显示位置固定后对应的属性。

那如何在绘制组件之前能获取到该组件的尺寸大小呢?

方法一 //测量方法

int wid =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);int hei =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);view.measure(wid,hei);int height=view.getMeasuredHeight();int width=view.getMeasuredWidth();

方法二 //增加组件绘制之前的监听

ViewTreeObserver vto =view.getViewTreeObserver(); vto.addOnPreDrawListener(newViewTreeObserver.OnPreDrawListener() {    @Override    publicboolean onPreDraw() {        int height =view.getMeasuredHeight();        int width =view.getMeasuredWidth();        }});

?

方法三 : //增加整体布局监听

ViewTreeObserver vto = view.getViewTreeObserver();  vto.addOnGlobalLayoutListener(newOnGlobalLayoutListener(){    @Override     publicvoid onGlobalLayout() {       view.getViewTreeObserver().removeGlobalOnLayoutListener(this);          int height =view.getMeasuredHeight();      int width =view.getMeasuredWidth();         } });


那么,在activity进入运行期时,组件的尺寸获取方法就很简单了,直接getWidth()和getHeight().
1 0
原创粉丝点击