标签:
在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