Jetpack WindowManager 1.4.0 で WindowWidthSizeClass
/ WindowHeightSizeClass
への直接のアクセスが deprecated になりました。
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
// deprecated
if (windowSizeClass.windowHeightSizeClass == WindowHeightSizeClass.COMPACT) {
// Height is Compact
}
deprecated になって代わりに isAtLeastBreakpoint
の API が追加されたので、その置き換え方のメモです。
WindowSizeClass
には androidx.window.core.layout.WindowSizeClass
と androidx.compose.material3.windowsizeclass.WindowSizeClass
が存在しますが、ここでの内容は前者のものになります。
置き換え
WindowSizeClass
には以下の定数が用意されており、それを isAtLeastBreakpoint
に渡すことで特定のサイズ以上かを確認することができます。
もちろん任意の値を渡すことも可能です。
const val WIDTH_DP_MEDIUM_LOWER_BOUND = 600
const val WIDTH_DP_EXPANDED_LOWER_BOUND = 840
const val HEIGHT_DP_MEDIUM_LOWER_BOUND = 480
const val HEIGHT_DP_EXPANDED_LOWER_BOUND = 900
1.5.0 以降では上記の定数に加えて Width に Large と Extra Large の定数が追加されます。
const val WIDTH_DP_LARGE_LOWER_BOUND = 1200
const val WIDTH_DP_EXTRA_LARGE_LOWER_BOUND = 1600
また、isAtLeastBreakpoint
には Width/Height を個別に判定するメソッドも用意されています。
fun isWidthAtLeastBreakpoint(widthDpBreakpoint: Int): Boolean
fun isHeightAtLeastBreakpoint(heightDpBreakpoint: Int): Boolean
fun isAtLeastBreakpoint(widthDpBreakpoint: Int, heightDpBreakpoint: Int): Boolean
特定の WindowSizeClass 以上かの判定
isAtLeastBreakpoint
が true であればセットしたサイズ以上になります。
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
if (windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND)) {
// Width is Medium or higher
}
if (windowSizeClass.isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND)) {
// Height is Medium or higher
}
if (
windowSizeClass.isAtLeastBreakpoint(
widthDpBreakpoint = WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND,
heightDpBreakpoint = WindowSizeClass.HEIGHT_DP_EXPANDED_LOWER_BOUND,
)
) {
// Width and height are Expanded or higher
}
特定の WindowSizeClass 以下かの判定
以下であることを返してくれる関数はないので、isAtLeastBreakpoint
の否定で判定する必要があります。
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
if (!windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND)) {
// Width is Compact
}
if (windowSizeClass.isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_EXPANDED_LOWER_BOUND)) {
// Height is Medium or lower
}
if (
!windowSizeClass.isAtLeastBreakpoint(
widthDpBreakpoint = WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND,
heightDpBreakpoint = WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND,
)
) {
// Width and height are Compact
}
組み合わせ
isWidthAtLeastBreakpoint
と isHeightAtLeastBreakpoint
の組み合わせで複雑な条件の判定もできます。
if (
windowSizeClass.isWidthAtLeastBreakpoint(WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND) &&
!windowSizeClass.isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND)
) {
// Width is Medium or higher, height is Compact
}