前言
總所周知,在activity啟動的onCreate或者其他生命周期里去獲取View的尺寸是錯誤的,因為很有可能View並沒有初始化測量繪制完成.你這個時候獲取的寬或的高不出意外就是0.所以,我們需要等待View的繪制完成后再來測量
第一種方法,將測量添加到View列隊里
mTextView.post(new Runnable() { @Override public void run() { int w = mTextView.getWidth(); int h = mTextView.getHeight(); } });
這個方式在TextView初始化全部完成后會執行這個消息列隊里的邏輯
第二種方法,監聽View的測繪完成
mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { mHeaderViewHeight = mHeaderView.getHeight(); mHeaderView.getViewTreeObserver() .removeGlobalOnLayoutListener(this); } });
但是需要注意的是OnGlobalLayoutListener可能會被多次觸發,因此在得到了高度之后,要將OnGlobalLayoutListener注銷掉。另外mHeaderViewHeight和mHeaderView都需要寫在當前java文件類(比如Activity)的成員變量中。