Android中获取控件尺寸进阶方案
在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