창 크기 클래스 사용

Window size classes are a set of opinionated viewport breakpoints that help you design, develop, and test responsive/adaptive layouts. The breakpoints balance layout simplicity with the flexibility of optimizing your app for unique cases.

Window size classes categorize the display area available to your app as compact, medium, expanded, large, or extra large. Available width and height are classified separately, so at any point in time, your app has two window size classes—one for width, one for height. Available width is usually more important than available height due to the ubiquity of vertical scrolling, so the width window size class is likely more relevant to your app's UI.

Figure 1. Representations of width-based window size classes.
Figure 2. Representations of height-based window size classes.

As visualized in the figures, the breakpoints allow you to continue thinking about layouts in terms of devices and configurations. Each size class breakpoint represents a majority case for typical device scenarios, which can be a helpful frame of reference as you think about the design of your breakpoint-based layouts.

Size class Breakpoint Device representation
Compact width width < 600dp 99.96% of phones in portrait
Medium width 600dp ≤ width < 840dp 93.73% of tablets in portrait,

most large unfolded inner displays in portrait

Expanded width 840dp ≤ width < 1200dp 97.22% of tablets in landscape,

most large unfolded inner displays in landscape are at least expanded width

Large width 1200dp ≤ width < 1600dp Large tablet displays
Extra-large width width ≥ 1600dp Desktop displays
Compact height height < 480dp 99.78% of phones in landscape
Medium height 480dp ≤ height < 900dp 96.56% of tablets in landscape,

97.59% of phones in portrait

Expanded height height ≥ 900dp 94.25% of tablets in portrait

Although visualizing size classes as physical devices can be useful, window size classes are explicitly not determined by the size of the device screen. Window size classes are not intended for isTablet‑type logic. Rather, window size classes are determined by the window size available to your application regardless of the type of device the app is running on, which has two important implications:

  • Physical devices do not guarantee a specific window size class. The screen space available to your app can differ from the screen size of the device for many reasons. On mobile devices, split‑screen mode can partition the screen between two applications. On ChromeOS, Android apps can be presented in desktop‑type windows that are arbitrarily resizable. Foldables can have two different‑sized screens individually accessed by folding or unfolding the device.

  • The window size class can change throughout the lifetime of your app. While your app is running, device orientation changes, multitasking, and folding/unfolding can change the amount of screen space available. As a result, the window size class is dynamic, and your app's UI should adapt accordingly.

Window size classes map to the compact, medium, and expanded breakpoints in the Material Design layout guidance. Use window size classes to make high‑level application layout decisions, such as deciding whether to use a specific canonical layout to take advantage of additional screen space.

다음을 사용하여 현재 WindowSizeClass를 계산합니다. currentWindowAdaptiveInfo() 최상위 함수 androidx.compose.material3.adaptive 라이브러리로 이동합니다. 이 함수는 windowSizeClass가 포함된 WindowAdaptiveInfo의 인스턴스입니다. 이 다음 예는 창 크기 클래스를 계산하고 창 크기 클래스를 창 크기 클래스가 변경될 때마다 업데이트됩니다.

val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass

창 크기 클래스를 사용하여 레이아웃 관리하기

창 크기 클래스를 사용하면 앱 레이아웃을 디스플레이 공간으로 변경할 수 있습니다. 예를 들어 기기를 접거나 펼칠 때 앱이 변경되면 기기 방향이 변경되거나 앱 창의 크기가 멀티 윈도우에서 조절됨 있습니다.

창 크기를 전달하여 디스플레이 크기 변경을 처리하는 로직 현지화 다른 앱 상태와 마찬가지로 클래스를 상태로 중첩된 컴포저블로 축소합니다.

@Composable
fun MyApp(
    windowSizeClass: WindowSizeClass = currentWindowAdaptiveInfo().windowSizeClass
) {
    // Decide whether to show the top app bar based on window size class.
    val showTopAppBar = windowSizeClass.isHeightAtLeastBreakpoint(WindowSizeClass.HEIGHT_DP_MEDIUM_LOWER_BOUND)

    // MyScreen logic is based on the showTopAppBar boolean flag.
    MyScreen(
        showTopAppBar = showTopAppBar,
        /* ... */
    )
}

Test window size classes

As you make layout changes, test the layout behavior across all window sizes, especially at the compact, medium, and expanded breakpoint widths.

If you have an existing layout for compact screens, first optimize your layout for the expanded width size class, since this size class provides the most space for additional content and UI changes. Then decide what layout makes sense for the medium width size class; consider adding a specialized layout.

Next steps

To learn more about how to use window size classes to create responsive/adaptive layouts, see the following:

To learn more about what makes an app great on all devices and screen sizes, see: