概要
Activity起動時にviewサイズを取得する方法について解説。
方法1: onGlobalLayoutを使用
addOnGlobalLayoutListener
でレイアウト変更時のリスナーを追加。
onGlobalLayout
メソッド内でViewサイズの計測を行う処理+リスナーの削除を行う。
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.view.viewTreeObserver.addOnGlobalLayoutListener(object : OnGlobalLayoutListener {
override fun onGlobalLayout() {
Log.i("", "width:" + binding.view.width + ", height:" + binding.view.height)
binding.view.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
}
方法2: postを使用
post
を用いることで、先ほどの処理より簡潔&直観的に記述できる。
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding.view.post {
Log.i("", "width:" + binding.view.width + ", height:" + binding.view.height)
}
}
方法3: onWindowFocusChangedを使用
この方法だとフォーカスが変更されるたびに呼び出されるようなので、個人的にはあまりおすすめしない。
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
Log.i("", "width:" + binding.view.width + ", height:" + binding.view.height)
}
参照