亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android監聽View加載完成的示例講解

2019-10-21 21:38:56
字體:
來源:轉載
供稿:網友

最近項目中需要實現一個GridView顯示6*5=30項,并鋪滿整個界面,界面中還有自定義ActionBar等其他控件,所以需要獲取剩下屏幕的高度。通過百度得知View有一個監聽函數,親測使用有效,特此記錄,方便日后查閱。

gv_test.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {   @Override   public void onGlobalLayout() {    //給GridView設置Adapter,在adapter的getView中獲取GridView的高度,在這個回調之前獲取的高度都是0    //處理完后remove掉,至于為什么,后面有解釋    gv_test.getViewTreeObserver()    .removeOnGlobalLayoutListener(this);   }  });

通過源碼追溯進去,找到ViewTreeObserver這個類,里面有很多interface,都是用來追蹤View的各種狀態變化的。

找到OnGlobalLayoutListener

/**  * Interface definition for a callback to be invoked when the global layout state  * or the visibility of views within the view tree changes.  */ public interface OnGlobalLayoutListener {  /**   * Callback method to be invoked when the global layout state or the visibility of views   * within the view tree changes   */  public void onGlobalLayout(); }

注釋的大概意思就是這個回調在布局狀態和可見狀態發生變化時回調,所以準確的說,這個不是監聽View的加載完成,而是監聽布局變化的。

我們來測試一下。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.myapplication.MainActivity"> <Button  android:onClick="test"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:text="test"/> <TextView  android:id="@+id/tv_test"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="測試"/></LinearLayout>
public class MainActivity extends AppCompatActivity { TextView tv_test; private static final String TAG = "MainActivity"; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  tv_test = (TextView)findViewById(R.id.tv_test);  //app切換到后臺,再點開會調用一次,屏幕關閉運行程序會調用兩次  tv_test.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {   @Override   public void onGlobalLayout() {    Log.e(TAG, "onGlobalLayout: ");   }  }); } public void test(View v){  //改變可見性,調用一次//  tv_test.setVisibility(View.GONE);  //改變文字布局,沒有效果//  tv_test.setGravity(Gravity.CENTER);  //修改控件大小,調用一次//  LinearLayout.LayoutParams para = (LinearLayout.LayoutParams) tv_test.getLayoutParams();//  para.height = 200;//  para.weight = 100;//  tv_test.setLayoutParams(para);  //修改layoutgravity,這個是在LayoutParams中,調用一次  LinearLayout.LayoutParams para = (LinearLayout.LayoutParams) tv_test.getLayoutParams();  para.gravity = Gravity.CENTER_HORIZONTAL;  tv_test.setLayoutParams(para); }}

運行程序,得到從android monitor中可以看到,啟動后調用了三次onGlobalLayout,很奇怪,為什么是三次?后來有一次屏幕鎖了,發現調用了兩次。經過測試,app退到后臺后重新進入會調用一次,屏幕鎖屏后重新打開會調用兩次(小米兩次,努比亞1次),其中一次猜測是控件的可見性改變了。

通過按鍵的測試,分別修改控件的可見性和布局,都會調用一次,修改控件內部布局,不會調用,同時修改布局和可見性,只調用一次。

到此三次之謎依舊沒有解決,不過,可以肯定的是,這個會重復

調用多次,使用的時候需要注意。解決的辦法就是第一次回調后,就把回調remove掉,如:gv_test.getViewTreeObserver()

.removeOnGlobalLayoutListener(this);

如有錯誤,敬請雅正。

以上這篇android監聽View加載完成的示例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性受xxxx黑人猛交| 精品久久国产精品| 久久久久久这里只有精品| 国产精品第8页| 一区二区在线视频播放| 黄网站色欧美视频| 亚洲成人av资源网| 精品国产31久久久久久| 欧美色视频日本版| 亚洲国产99精品国自产| 另类少妇人与禽zozz0性伦| 国产成人在线精品| 日韩精品在线影院| 精品国产依人香蕉在线精品| 日本久久久久久| 高清亚洲成在人网站天堂| 国产精品久久久av| 97视频在线免费观看| 国产精品69久久| 欧美激情在线播放| 亚洲国产成人精品久久| 欧美壮男野外gaytube| 国产精品视频自在线| 色噜噜亚洲精品中文字幕| 欧美性资源免费| 91久久精品国产91久久性色| 亚洲精品一区久久久久久| 久久久久女教师免费一区| 日韩欧美a级成人黄色| 久久久久久网址| 精品福利在线观看| 久久久精品亚洲| 2023亚洲男人天堂| 午夜精品福利电影| 欧美亚州一区二区三区| 欧美性受xxxx白人性爽| 91视频8mav| 亚洲变态欧美另类捆绑| 青青草一区二区| 91久久久在线| 中文字幕亚洲无线码在线一区| 久久久久亚洲精品国产| 日韩精品视频三区| 国产精欧美一区二区三区| 精品在线欧美视频| 色系列之999| 欧美日韩精品在线播放| 久久99精品久久久久久青青91| 亚洲欧美日韩精品久久奇米色影视| 最近免费中文字幕视频2019| 欧美一级视频在线观看| 亚洲国产一区自拍| 91精品国产电影| 成人欧美一区二区三区在线湿哒哒| 亚洲香蕉成人av网站在线观看| 国产激情久久久久| 欧美福利视频在线观看| 欧美性在线视频| 亚洲成人精品视频| 岛国精品视频在线播放| 97成人精品视频在线观看| 精品欧美激情精品一区| 亚洲丝袜一区在线| 亚洲色图美腿丝袜| 一区二区三区日韩在线| 久久精品国产欧美激情| 亚洲桃花岛网站| 亚洲精品福利视频| 国产视频精品va久久久久久| 日韩精品日韩在线观看| 91精品啪aⅴ在线观看国产| 海角国产乱辈乱精品视频| 日韩在线免费高清视频| 亚洲视频欧美视频| 国产精品综合不卡av| 成人乱人伦精品视频在线观看| 午夜精品蜜臀一区二区三区免费| 久久久久久12| 夜夜狂射影院欧美极品| 久久网福利资源网站| 成人免费网视频| 国产精品com| 国内精品久久久久久影视8| 欧美韩日一区二区| 精品毛片网大全| 亚洲情综合五月天| 综合国产在线观看| 91国产在线精品| 日韩高清中文字幕| 国产成人jvid在线播放| 久久精品国产欧美激情| 国产欧美最新羞羞视频在线观看| 欧美最猛性xxxxx(亚洲精品)| 久久国产视频网站| 91精品综合视频| 亚洲成人久久网| 亚洲大尺度美女在线| 欧美极品在线播放| 欧美激情亚洲国产| 国产91精品不卡视频| 久久99热这里只有精品国产| 欧美亚洲激情视频| 亚洲精品视频在线播放| 2021国产精品视频| 亚洲视频一区二区三区| 欧美一级黄色网| 成人欧美一区二区三区黑人孕妇| 国产精品亚发布| 蜜臀久久99精品久久久久久宅男| 国产一区二区三区免费视频| 午夜精品一区二区三区在线播放| 国产一区二区三区高清在线观看| 国模精品一区二区三区色天香| 亚洲精品aⅴ中文字幕乱码| 久久精品成人欧美大片古装| 久久久精品影院| 中文字幕欧美日韩在线| 欧美日韩亚洲视频| 一区二区三区回区在观看免费视频| 一区二区欧美在线| 美女国内精品自产拍在线播放| 日本精品久久电影| 精品国产拍在线观看| 久久av红桃一区二区小说| 欧美精品www在线观看| 亚洲国产婷婷香蕉久久久久久| 欧美整片在线观看| 成人国产精品免费视频| 国产精品视频yy9099| 国产精品视频26uuu| 国产欧美欧洲在线观看| 亚洲一区二区三区在线免费观看| 日韩中文在线观看| 91免费福利视频| 国产精品一区二区三| 日韩精品一二三四区| 日韩经典第一页| 久久精品成人动漫| 91精品国产电影| 国产精品日韩久久久久| 欧美老少做受xxxx高潮| 欧美大尺度激情区在线播放| 午夜剧场成人观在线视频免费观看| 亚洲成人黄色在线观看| 亚洲free性xxxx护士hd| 日韩精品在线免费| 亚洲男人天堂2023| 欧美肥臀大乳一区二区免费视频| 欧美肥婆姓交大片| 欧美在线视频一区| 91精品久久久久久久久久久久久久| 成人国产精品日本在线| 日本中文字幕成人| 俺去亚洲欧洲欧美日韩| 日韩极品精品视频免费观看| 亚洲欧美日韩中文视频| 成人欧美在线视频| 日韩欧美在线字幕| 日韩av电影在线免费播放| 午夜精品美女自拍福到在线| 精品国偷自产在线视频| 欧美国产日韩免费| 精品久久久久久久中文字幕| 色综久久综合桃花网|