Window Size Class — その概要、サイズクラスと開発

著者: IT Sectr 公開日: 2026-06-08 読了時間: 9 分

Window Size ClassはJetpack WindowManagerのAPIで、アプリケーションウィンドウをCompact、Medium、Expandedの3つのカテゴリに分類します。物理的な解像度やピクセル密度を確認する代わりに、クラスはdp単位で利用可能な幅を分析します——これにより、あらゆるデバイスで予測可能な結果が得られます。Android Developers Documentation (2025)によると、Window Size ClassはWindowManagerのおかげで、Jetpack ComposeおよびViewシステムにおけるアダプティブインターフェースの標準となっています。

重要なポイント

  • Window Size Class — ウィンドウ幅をCompact、Medium、Expandedに分類するAPI。
  • Compact — 600 dpまでの狭いウィンドウ向けのクラス。ポートレートモードのスマートフォンに典型的。
  • Medium — 600〜840 dpのウィンドウ向けのクラス。ポートレートのタブレットやランドスケープのスマートフォンに特徴的。
  • Expanded — 840 dp以上の広いウィンドウ向けのクラス。タブレットやデスクトップで見られる。
  • Material Design 3はアダプティブレイアウトの基盤としてWindow Size Classを使用している。

Window Size Classとは?

Window Size Classは、Jetpack WindowManagerライブラリに含まれるAndroidプラットフォームのAPIで、アプリケーションウィンドウの利用可能なスペースを3つのカテゴリに分類します。リソース修飾子(small/large/xlarge)を用いた従来のアプローチとは異なり、Window Size Classは開発者がインターフェースを設計する際に頼りにできる個別の値セットを提供します。

このAPIはマルチウィンドウモードのサポートの一環としてAndroid 7.0 Nougatで登場しましたが、活発な導入はJetpack WindowManager 1.1(2022年)から始まりました。GoogleはDisplay.getSize()による画面幅の確認ではなく、アダプティブレイアウト構築の主要ツールとしてWindow Size Classを推奨しています。

分類は物理的なサイズやピクセル密度ではなく、dp単位でのウィンドウ幅に基づいています。つまり、解像度は異なるがdp単位での幅が同じ2つのデバイスは同じクラスを受け取ります——インターフェースは予測どおりに同一になります。

Androidの3つのウィンドウサイズクラス

Compact — 幅600 dpまでのウィンドウ向けのクラス。ポートレートモードのスマートフォン、折りたたみ状態のほとんどのフォルダブル端末(Galaxy Z Flip)。インターフェースは1カラムで構築され、ナビゲーションはBottom Navigationを使用。

Medium — 幅600〜840 dpのウィンドウ向けのクラス。ポートレートのタブレット、ランドスケープのスマートフォン、半開き状態のフォルダブル端末。インターフェースは2カラムを使用——例えば、左側にリスト、右側に詳細。Navigation RailがBottom Navigationを置き換えます。

Expanded — 幅840 dp以上のウィンドウ向けのクラス。ランドスケープのタブレット、デスクトップウィンドウ、展開状態のフォルダブル端末。インターフェースは3つ以上のパネル、Permanent Navigation Drawer、ツールパネルを使用できます。

Material Design 3では、各クラスに対してアダプティブコンポーネントが定義されています:MediumにはNavigation Rail、ExpandedにはNavigation Drawer、CompactにはBottom Navigation。開発者はブレークポイントを選択する必要はありません——それらはAPIによって既に定義されています。

Window Size Classの仕組み

Window Size Classは、システム要素——ステータスバー、ナビゲーションバー、Split Screenの画面分割——を考慮した上で、アプリケーションウィンドウの現在の幅(dp単位)に基づいて計算されます。APIはウィンドウ構成の変更(デバイスの回転、マルチウィンドウモードへの移行、フォルダブル端末の展開)時にトリガーされます。

クラスを取得するには、androidx.windowライブラリのWindowSizeClassクラスを使用します。開発者はFlow(Kotlin)またはLiveData(Java)を購読し、手動のonConfigurationChanged処理なしで、ウィンドウサイズが変更されるたびに自動的にクラスを更新します。

分類は3つのステップで行われます。第一に——現在のウィンドウ幅をピクセル単位で測定。第二に——DisplayMetrics.densityを介してdpに変換。第三に——取得した値をしきい値と比較:600 dp未満——Compact、600〜840——Medium、840以上——Expanded。

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // compact width
    WindowWidthSizeClass.MEDIUM  -> // medium width
    WindowWidthSizeClass.EXPANDED -> // expanded width
}

幅(windowWidthSizeClass)に加えて、APIはウィンドウの高さ(windowHeightSizeClass)のクラスも提供します——ランドスケープ方向やデスクトップウィンドウに便利です。

Jetpack ComposeにおけるWindow Size Class

Jetpack Composeでは、Window Size ClassはcurrentWindowAdaptiveInfo()関数を介して使用され、幅と高さのクラスを含むWindowAdaptiveInfoを返します。この関数は、ウィンドウサイズだけでなく、入力タイプ(キーボード、マウス、タッチ)——WindowPostureとWindowLayoutInfoを通じて——も考慮します。

典型的なシナリオは、クラスに応じてレイアウトを切り替えることです。例えば、Compactでは選択肢のあるBottomSheetを表示、Mediumではサイドパネル、Expandedでは恒久的なNavigation Drawerを表示します。

kotlin
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
    when (windowSizeClass) {
        WindowWidthSizeClass.COMPACT -> BottomNavigation()
        WindowWidthSizeClass.MEDIUM  -> NavigationRail()
        WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
    }
}

Material Design 3では、NavigationSuiteScaffoldコンポーネントが自動的にWindow Size Classに適応します——開発者は条件付きロジックを書く必要がありません。

Window Size ClassとMaterial Design 3

Material Design 3(Material You)はWindow Size Classと完全に統合されています。Material 3のアダプティブレイアウトシステムは、各クラスでどのナビゲーションコンポーネントを使用するかを決定します:CompactにはBottomNavigation、MediumにはNavigationRail、ExpandedにはNavigationDrawer。

この統合はAdaptive APIレベルで機能し、Window Size Classを他のシグナル——FoldState(フォルダブル端末)とWindowPosture(画面の位置)——と組み合わせます。Adaptive APIはmaterial3-adaptiveライブラリを通じて利用可能です。

Material 3は4つのアダプティブなトップレベルコンポーネントを提供します:ListDetailPaneScaffold、SupportingPaneScaffold、NavigationSuiteScaffold、AdaptiveSheet。それぞれが追加設定なしでWindow Size Classに応じて動作を変更します。

クラスナビゲーションコンポーネントPane Scaffold
CompactBottom Navigation非表示パネル
MediumNavigation Railスライドパネル
ExpandedNavigation Drawer固定パネル

アダプティブレイアウトの利点

Window Size Classを使用すると、モバイル開発において3つの主要な利点が得られます。第一に——予測可能性:何百もの画面サイズの組み合わせの代わりに、開発者は3つのクラスで作業します。これにより、テストシナリオの数とレイアウトに関連するバグが根本的に減少します。

第二に——マルチウィンドウモードへの自動適応。ユーザーがSplit Screenに入ると、ウィンドウ幅が変更され——Window Size Classが即座に再計算され、インターフェースが適応します。このAPIがない場合、分割画面のアプリケーションはスマートフォンインターフェースの縮小版を表示します。

第三に——Material Design 3との一貫性。GoogleはWindow Size Classをアダプティブコンポーネントシステムに組み込んだため、Material 3上に構築されたインターフェースは、追加作業なしで自動的に大画面デザインに関するGoogleの推奨事項に従います。

よくある質問

Window Size ClassとScreen Size Bucketsの違いは何ですか?

Screen Size Buckets(small/large/xlarge)は、画面の物理的なサイズに基づくAndroid 1.6〜6.0の時代遅れのアプローチです。Window Size Classはdp単位の利用可能なウィンドウ幅に焦点を当て、ウィンドウサイズが変更されるとリアルタイムで動作します。

Android 6以下でWindow Size Classをサポートする必要がありますか?

Window Size Classは、バックポートライブラリを使用してAndroid 7.0以上のJetpack WindowManagerを通じて利用可能です。Android 6以下では、マルチウィンドウがないためCompactのみです。WindowMetricsを介したフォールバックを使用してください。

フォルダブル端末ではWindow Size Classはどのように機能しますか?

端末を展開するとウィンドウ幅が変更され、Window Size Classが自動的に再計算されます。利用可能な領域の増加により、クラスがCompactからExpandedに変わる可能性があります。

XMLレイアウト(Views)でWindow Size Classを使用できますか?

はい、ActivityまたはFragmentでWindowManagerを介して可能です。WindowSizeClassを取得した後、条件付きロジックを使用してXMLレイアウトを切り替えたり、Viewの表示状態を変更したりします。

WindowHeightSizeClassにはどのようなしきい値が使用されますか?

ウィンドウの高さの場合、しきい値は異なります:Compact — 480 dpまで、Medium — 480〜900 dp、Expanded — 900 dp以上。WindowHeightSizeClassはランドスケープ方向やデスクトップで便利です。

まとめ

  • Window Size Class — ウィンドウ幅をCompact、Medium、Expandedに分類するJetpack WindowManager API。
  • Compact — 600 dpまで、1カラムインターフェース、Bottom Navigation。
  • Medium — 600〜840 dp、2カラムインターフェース、Navigation Rail。
  • Expanded — 840 dp以上、マルチパネルインターフェース、Navigation Drawer。
  • Jetpack Compose — 実行時にクラスを取得するcurrentWindowAdaptiveInfo()関数。
  • Material Design 3 — アダプティブコンポーネントが自動的にWindow Size Classに反応。
  • 結論 — Window Size Classは従来のブレークポイントベースの適応に代わり、すべてのデバイスでインターフェースを予測可能にします。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください