android getview方法,android 获取view的getLeft(), getRight(), getTop(),... - 简书
問題描述
當我們在onCreate()回調方法中去調用getLeft(), getRight(), getTop(), getBottom()、getLocationInWindow等值為0
問題原因
View的顯示必須經歷Measure(測量)、Layout(布局)和Draw(繪制)過程。而在Measure與Layout過程完成之后,View的width、height、top、left等屬性才被正確賦值,此時我們才能獲取到正確的值,這幾個過程都晚于onCreate執行
解決方式
1、 view post 一個runnable。
因為UI線程消息隊列會按順序處理事件,在setContentView()被調用后,消息隊列中會包含一個要求重新Layout的msg,所以任何你post到UI線程隊列中的東西都會在Layout后執行。
view.post(new Runnable() {
@Override
public void run() {
view.getHeight();
}
});
2、重寫Activity的onWindowFocusChanged方法。
在Activity得到或者失去焦點的時候,就會被調用。Activity初始化完畢準備顯示的時候就會回調該方法。所以說,只要想做一些Activity加載完畢就馬上觸發的事情,都可以在這里執行。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//此處可以正常獲取width、height等
}
3、為View注冊監聽器OnGlobalLayoutListener。
視圖樹的可視性或全局布局狀態發生變化時執行的回調函數,此時已經完成Layout過程,可能會被多次調用,所以獲取完后就可以移除監聽器
mView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//此處可以正常獲取width、height等
mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
總結
以上是生活随笔為你收集整理的android getview方法,android 获取view的getLeft(), getRight(), getTop(),... - 简书的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 监听时钟变化,Andro
- 下一篇: uygurqa输入法android,uy