Jetpack ComposeのonSizeChangedとonGloballyPositioned
こんにちは。
今日は Jetpack Compose
の公式サンプルアプリの一つであるJetsurvey
のソースコードでお勉強しています。
そこで onSizeChanged
と onGloballyPositioned
というものが出てきてドキュメントを読み調べてみました。
onSizeChanged
まずこいつですが、名前的にサイズが変更されたときに呼ばれるのかなと思いました。ただ挙動を見ている限りどうも最初も呼ばれている模様。下記のドキュメントに普通に書いていましたが最初のコンポーズ時とサイズが変わった時に呼ばれるみたいです。
[onSizeChanged] wiill only be invoked during the first time measurement or when the size has changed.
またonSizeChanged
を下記のように子要素にも記述した場合、初回コンポーズ時は子要素から呼ばれます。(2 -> 1となる。)
(これは子要素の大きさが決まって初めて親要素の大きさも決まっていく感じですかね?)
Box( modifier = Modifier.onSizeChanged { 1 } ) { Box( modifier = Modifier.onSizeChanged { 2 } ) }
onGloballyPositioned
次はこいつです。 要素の配置が変更されたときに呼ばれます。またドキュメントにもありますが、初回コンポーズ時にもしっかり呼ばれます。
Note that it will be called after a composition when the coordinates are finalized.
下記のような場合は親要素から呼ばれます。(1 -> 2)
Box( modifier = Modifier.onGloballyPositioned { 1 } ) { Box( modifier = Modifier.onGloballyPositioned { 2 } ) }