在Android開發中,很多場景都需要獲取控件(View)的寬高信息,比如動態布局調整、動畫效果實現等。然而,直接在Activity的
onCreate()中調用控件的
getWidth()或
getHeight()`方法,得到結果卻是0,因為控件還沒完成布局測量。
本文總結了幾種獲取控件大小的實用方法,并對各方法的適用場景和優缺點做了說明,幫助你選擇最適合自己項目的方案。
1. 使用View.post()方法
這是最簡單且常用的方法之一,post()
會在控件布局完成后執行代碼,從而確保可以獲得真實尺寸。
val myView = findViewById<View>(R.id.my_view) myView.post { val width = myView.width val height = myView.height
}
post會把代碼放到消息隊列,等控件布局完成后執行。
2. 使用 ViewTreeObserver.OnGlobalLayoutListener
val myView = findViewById<View>(R.id.my_view)myView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {override fun onGlobalLayout() {myView.viewTreeObserver.removeOnGlobalLayoutListener(this)val width = myView.widthval height = myView.height}
})
監聽整個視圖樹的布局完成,拿到尺寸后及時移除監聽。
3. 重寫 onWindowFocusChanged(推薦時機)
override fun onWindowFocusChanged