码迷,mamicode.com
首页 > 移动开发 > 详细

(Android)View.getHeight或getWidth为0时的一些解决方案

时间:2015-04-20 22:12:23      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

在Android开发过程中,经常需要动态的更改View的大小,有些View的大小可能需要根据其他View的大小来设定,或者你需要得到一些View的大小来进行某项操作,但是有可能你需要在onCreate中就得到这个值,但是有些Android基础的开发人员都清楚,Android在onCreate方法(或者OnResume)中并不知道这些View的大小。这个时候我们需要怎么办呢?

1.第一种暴力方式

你可以写一个子线程,让它先延迟几百毫米,然后再去获取View的大小,哈哈,这种方法好扯淡,我也这么觉得。。

2.在onWindowFocusChanged 监听中获取

onWindowFocusChanged方法的调用时机是窗口获取到焦点的时候,这个时候View都已经绘制完毕了,正确的Height和Width也就能够得到了。

3.使用View.post

1 mView = findViewById(R.id.textview);
2         mView.post(new Runnable() {
3             @Override
4             public void run() {
5                 int viewWidth = mView.getWidth();
6                 int viewHeight = mView.getHeight();
7                 Log.d(TAG, "viewWidth:" + viewWidth + "\nviewHeight:" + viewHeight);
8             }
9         });

这种方式可以让runable中的run方法在绘制完毕后去执行,但是这种方式我这不知道为什么,有时候需要我去点击一下屏幕,或者做其他操作后,才会去执行,不明所以

4.使用Handler

这种方式大部分人都能够想到

5.监听Draw/Layout事件:ViewTreeObserver

ViewTreeObserver greenObserver = mView.getViewTreeObserver();
                        greenObserver.addOnPreDrawListener(new OnPreDrawListener() {

                            @Override
                            public boolean onPreDraw() {
                                mView.getViewTreeObserver().removeOnPreDrawListener(this);
                                int height = mView.getHeight
                                     
                                return true;
                            }
                        }); 

 

(Android)View.getHeight或getWidth为0时的一些解决方案

标签:

原文地址:http://www.cnblogs.com/recwert/p/4442692.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!