1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindowManager 1.4.0で置き換えが必要になったisAtLeastBreakpointの解説

Last updated at Posted at 2025-05-19

Jetpack WindowManager 1.4.0WindowWidthSizeClass / WindowHeightSizeClass への直接のアクセスが deprecated になりました。

val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
// deprecated
if (windowSizeClass.windowHeightSizeClass == WindowHeightSizeClass.COMPACT) {
    // Height is Compact
}

deprecated になって代わりに isAtLeastBreakpoint の API が追加されたので、その置き換え方のメモです。

WindowSizeClass には androidx.window.core.layout.WindowSizeClassandroidx.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
}

組み合わせ

isWidthAtLeastBreakpointisHeightAtLeastBreakpoint の組み合わせで複雑な条件の判定もできます。

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
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?