之前被人問(wèn)到Activity的生命周期函數(shù)onStart中能做些什么操作,我想了想,可以請(qǐng)求網(wǎng)絡(luò),難道在onCreate中就不能請(qǐng)求網(wǎng)路,難道在onResume中就不能請(qǐng)求網(wǎng)路呀狼,也是既然在這些方法中都可以請(qǐng)求網(wǎng)路,那onStart方法中我們能做什么比較恰當(dāng)呢损离?
在《Android開發(fā)技術(shù)探索》一書中發(fā)現(xiàn)了一段代碼
protected void onStart() {
super.onStart();
ViewTreeObserver observer = view.getViewTreeObserver();
observer.adddOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
view.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = view.gerMeasureWidth();
int height = view.getMeasureHeight();
}
});
}
復(fù)制代碼
這段代碼實(shí)現(xiàn)的功能是獲取View的寬高哥艇,詳解如下:
ViewTreeObserver類
使用ViewTreeObserver的眾多回調(diào)可以完成這個(gè)功能。View中有ViewTreeObserver類的實(shí)例僻澎,獲取該對(duì)象然后添加OnGlobalLayoutListener監(jiān)聽貌踏,當(dāng)View樹的狀態(tài)發(fā)生改變或者View樹內(nèi)部的View的可見性發(fā)生變化時(shí)十饥,onGlobalLayout()方法將被回調(diào),因此這是獲取View的寬高的一個(gè)好的時(shí)機(jī)祖乳。
得出的結(jié)論是設(shè)置View的監(jiān)聽器逗堵。