(Android)View.getHeight或getWidth为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;
                            }
                        }); 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。