日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android getview方法,android 获取view的getLeft(), getRight(), getTop(),... - 简书

發(fā)布時(shí)間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android getview方法,android 获取view的getLeft(), getRight(), getTop(),... - 简书 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問題描述

當(dāng)我們在onCreate()回調(diào)方法中去調(diào)用getLeft(), getRight(), getTop(), getBottom()、getLocationInWindow等值為0

問題原因

View的顯示必須經(jīng)歷Measure(測量)、Layout(布局)和Draw(繪制)過程。而在Measure與Layout過程完成之后,View的width、height、top、left等屬性才被正確賦值,此時(shí)我們才能獲取到正確的值,這幾個(gè)過程都晚于onCreate執(zhí)行

解決方式

1、 view post 一個(gè)runnable。

因?yàn)閁I線程消息隊(duì)列會按順序處理事件,在setContentView()被調(diào)用后,消息隊(duì)列中會包含一個(gè)要求重新Layout的msg,所以任何你post到UI線程隊(duì)列中的東西都會在Layout后執(zhí)行。

view.post(new Runnable() {

@Override

public void run() {

view.getHeight();

}

});

2、重寫Activity的onWindowFocusChanged方法。

在Activity得到或者失去焦點(diǎn)的時(shí)候,就會被調(diào)用。Activity初始化完畢準(zhǔn)備顯示的時(shí)候就會回調(diào)該方法。所以說,只要想做一些Activity加載完畢就馬上觸發(fā)的事情,都可以在這里執(zhí)行。

@Override

public void onWindowFocusChanged(boolean hasFocus) {

super.onWindowFocusChanged(hasFocus);

//此處可以正常獲取width、height等

}

3、為View注冊監(jiān)聽器OnGlobalLayoutListener。

視圖樹的可視性或全局布局狀態(tài)發(fā)生變化時(shí)執(zhí)行的回調(diào)函數(shù),此時(shí)已經(jīng)完成Layout過程,可能會被多次調(diào)用,所以獲取完后就可以移除監(jiān)聽器

mView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

//此處可以正常獲取width、height等

mView.getViewTreeObserver().removeOnGlobalLayoutListener(this);

}

});

總結(jié)

以上是生活随笔為你收集整理的android getview方法,android 获取view的getLeft(), getRight(), getTop(),... - 简书的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。