まくろぐ
更新: / 作成:

ConstraintLayout で配置したビューは、周囲のビューとの位置関係で位置やサイズなどが決まるため、実際に内部的なレイアウトが終了するまでは、ビューのサイズ情報などが取得できなかったりします(0 になります)。

View.doOnLayout() などで、レイアウト完了するのを待ってからサイズを取得すればうまくいきます。 これは、TransitionManager などでレイアウトを切り替えた直後なども同様です。

// レイアウト変更&アニメーション開始
TransitionManager.beginDelayedTransition(constraintLayout)
constraintSet.applyTo(constraintLayout)

// この直後にレイアウト情報取得してもうまく取得できない
val w = myView.width
val h = myView.height

myView.doOnLayout {
    // このタイミングであればうまく取得できる
    val w = it.width
    val h = it.height
}

関連記事

まくろぐ
サイトマップまくへのメッセージ