androidx.compose.material3:material3-window-size-class と androidx.compose.material3.adaptive:adaptive が依存する androidx.window:window にはどちらも WindowSizeClass
があります。
共通点
どちらも WindowSizeClass
という大画面対応におけるブレイクポイントに関する API になります。
どちらもブレイクポイントとなる値に差はなく同じものとなっています。
違い
WindowSizeClass の取得方法
material3-window-size-class
は Activity
を必要とするのに対して、adaptive
経由の window
の場合は関数を呼ぶだけになります。
// material3-window-size-class
val windowSizeClass = calculateWindowSizeClass(activity)
// adaptive経由のwindow
val adaptiveInfo = currentWindowAdaptiveInfo()
val windowSizeClass = adaptiveInfo.windowSizeClass
扱う情報
material3-window-size-class
の場合は WindowSizeClass
しか持っていないため、Width/Height の Compact/Medium/Expanded のみ判定が可能になっています。
一方の window
の場合は WindowSizeClass
だけでなく Foldable のヒンジの情報も持っています。また、window
の 1.5.0 以上では WindowWidthSizeClass
に Large/Extra-large の判定も可能になっています。
どちらを使うべきか
扱いやすさや扱う情報の多さ的には androidx.compose.material3.adaptive:adaptive
と androidx.window:window
の方が優先されるように思います。
また、androidx.window:window
は WindowWidthSizeClass
に Large/Extra-large が対応される予定がある一方で、androidx.compose.material3:material3-window-size-class
には動きがないので将来的にどちらかだけがメンテナンスされる可能性もありそうです。