2025년 3월 27일부터 AOSP를 빌드하고 기여하려면 aosp-main
대신 android-latest-release
를 사용하는 것이 좋습니다. 자세한 내용은 AOSP 변경사항을 참고하세요.
이중 창 맞춤설정
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
Android 12에서는 왼쪽에 정적 L0 메뉴가 있고 오른쪽에 콘텐츠 창이 있는 이중 창 디자인을 도입합니다. 이 기능을 통해 다양한 맞춤설정 옵션이 새로 도입됩니다. 이 페이지에서는 이러한 기능을 자세히 설명하고 자체 환경설정을 맞춤설정할 수 있는 방법을 설명합니다.
단일 창으로 되돌리기
기본적으로 CarSettings에서는 이제 앱 창의 너비가 1400dp보다 크거나 같을 때 이중 창 뷰를 표시하고 그보다 작으면 단일 창 뷰를 표시합니다. 특정 기기에 맞게 이를 맞춤설정하려면 런타임 리소스 오버레이 (RRO)를 사용하여 필요한 구성 값을 타겟팅합니다.
값 |
설명 |
config_global_force_single_pane |
전체 앱이 단일 창 구성으로 실행되어야 하면 true 로 설정합니다. |
config_homepage_fragment_class |
홈페이지의 시작 프래그먼트를 지정합니다. 이중 창에서는 콘텐츠 창의 초기 프래그먼트에 사용됩니다. 단일 창에서는 홈페이지 프래그먼트여야 합니다. |
맞춤설정된 IA가 여러 CarSettings 활동에 있을 수 있으므로 헤더 키 매핑은 맞춤설정을 간소화하기 위해 제공됩니다. AndroidManifest.xml
에서 이중 창을 지원하는 모든 활동에는 메타데이터에서 지정된 TOP_LEVEL_HEADER_KEY
가 있습니다.
이 값은 시작 프래그먼트가 속한 최상위 메뉴 항목의 환경설정 키에 매핑되는 res/values/header_keys.xml
에서 지정된 키를 가리킵니다.
따라서 특정 프래그먼트가 다른 최상위 환경설정에 속하도록 활동의 시작 프래그먼트가 변경되거나 IA가 다시 정렬되는 경우 header_keys.xml
파일의 관련 매핑을 업데이트하여 올바른 값을 지정할 수 있습니다.
활동 레이아웃 맞춤설정
BaseCarSettingsActivity
의 레이아웃은 res/layout/car_setting_activity
및 다음 섹션에 있습니다.
값 |
설명 |
top_level_menu |
이중 창 구성에 표시된 최상위 메뉴 프래그먼트입니다. 이 섹션의 너비는 top_level_menu_width 로 지정됩니다. 툴바가 포함된 섀시 기본 레이아웃은 이 뷰를 래핑합니다. |
top_level_divider |
두 창을 분할하고 너비를 top_level_divider_width 로 맞춤설정할 수 있는 수직선입니다. |
fragment_container_wrapper |
콘텐츠 창(또는 단일 창 구성의 기본 창)의 래퍼 레이아웃입니다.
툴바가 포함된 섀시 기본 레이아웃은 이 뷰를 래핑합니다. |
settings_focus_parking_view |
필요할 때 로터리 포커스를 보유하는 FocusParkingView 의 맞춤 구현입니다. |
fragment_container |
기본 콘텐츠 컨테이너입니다. 콘텐츠 프래그먼트는 이를 타겟 레이아웃으로 사용합니다. |
restricted_message |
BaseFragment 인스턴스에 표시될 UX 제한 차단 뷰입니다. |

그림 1. 이중 창 레이아웃
최상위 환경설정
최상위 환경설정은 환경설정 높이와 배경 모양을 변경하기 위해 레이아웃이 약간 수정된 맞춤 CarUiPreferences입니다. 이러한 환경설정의 모양을 맞춤설정하는 방법에는 여러 가지가 있습니다.
값 |
설명 |
res/layout/top_level_preference.xml |
전체 환경설정 레이아웃을 오버레이합니다. |
top_level_preference_min_height |
최상위 환경설정의 최소 높이입니다. 콘텐츠(예: 부제목이 있음)에 따라 환경설정이 이 값보다 클 수 있습니다. |
top_level_preference_corner_radius |
둥근 모서리의 반경입니다. |
top_level_preference_background |
현재 강조표시되지 않은 최상위 환경설정의 배경입니다. |
top_level_preference_highlight |
강조표시된 최상위 환경설정의 배경입니다. |
최상위 아이콘
그림 2는 이제 최상위 아이콘이 색이 지정된 배경 모양 내의 벡터 아이콘으로 구성되는 방식을 보여줍니다. 이 모양은 현재 타원형이나 직사각형 모양을 지원하도록 구성되어 있습니다. 기본적으로 모양은 타원형으로 설정됩니다.
기본값을 변경하려면 config_top_level_icon_shape
의 값을 수정합니다. 0은 직사각형이고 1은 타원형입니다. 아이콘은 배경 모양에서 top_level_foreground_icon_inset
으로 전경 아이콘을 삽입하여 만들어집니다. 각 최상위 아이콘에는 res/values/colors.xml
에서 지정된 전경 색상과 res/color
폴더에서 지정된 배경 색상이 있습니다.
맞춤설정된 모양을 만들려면 색상 값을 모두 재정의하면 됩니다.

그림 2. 최상위 환경설정 구성요소
config_top_level_injection_categories
로 지정된 카테고리에 속하는 삽입된 환경설정 아이콘도 최상위 아이콘으로 간주됩니다.
제공된 아이콘은 다른 모든 최상위 아이콘에 지정된 것과 같은 값과 같은 모양으로 삽입됩니다(위 참고). 그러나 배경은 다음 속성을 순서대로 확인하여 결정됩니다.
com.android.settings.bg.argb
: 삽입 앱의 메타데이터입니다.
com.android.settings.bg.hint
: 삽입 앱의 메타데이터입니다.
top_level_injected_default_background
: res/values/colors.xml
에서 지정됩니다.
삽입되는 앱 데이터를 무시하고 항상 기본 배경을 사용하려면 config_top_level_injection_background_always_use_default
를 true
로 설정합니다.
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-27(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-27(UTC)"],[],[],null,["# Dual pane customization\n\nAndroid 12 introduces a *dual pane* design, with a static L0 menu on the left and\na content pane on the right. This feature introduces many new customization options. This page\ndetails those features and explains how you can customize your own preferences.\n\nRevert to single pane\n---------------------\n\nBy default, CarSettings now displays the dual pane view when the app window is\ngreater than or equal to 1400dp in width and the single pane view otherwise. To customize\nthis for a specific device, use a runtime resource overlay (RRO) to target the necessary\nconfiguration values:\n\n| Value | Description |\n|-----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `config_global_force_single_pane` | Set to `true` if the entire app is to run in single-pane configuration. |\n| `config_homepage_fragment_class` | Specifies the starting fragment for the homepage. In dual pane, this is used for the initial fragment in the content pane. In single-pane, this should be the homepage fragment. |\n\nHeader keys\n-----------\n\nBecause different CarSettings activities can have a customized IA, a header key mapping\nis provided to simplify customizations. In `AndroidManifest.xml`, every activity\nthat supports dual pane has a `TOP_LEVEL_HEADER_KEY` specified in its metadata.\nThis value points to a key specified in `res/values/header_keys.xml`, which is\nmapped to the preference key of the top-level menu item that the starting fragment falls under.\nTherefore, if the starting fragment of an activity is changed or the IA is rearranged such\nthat a particular fragment falls under a different top-level preference, the relevant mapping(s)\nin the `header_keys.xml` file can be updated to specify the correct value.\n\nCustomize activity layout\n-------------------------\n\nThe layout for `BaseCarSettingsActivity` is located in\n`res/layout/car_setting_activity` and in these sections:\n\n| Value | Description |\n|-------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `top_level_menu` | Top-level menu fragment shown in dual pane configurations. Width of this section is specified by `top_level_menu_width`. A chassis base layout (with toolbar) is wrapped around this view. |\n| `top_level_divider` | Vertical line that splits the two panes and whose width you can customize with `top_level_divider_width`. |\n| `fragment_container_wrapper` | Wrapper layout for the content pane (or the main pane in a singlepane configuration). A chassis baselayout (with toolbar) is wrapped around this view. |\n| `settings_focus_parking_view` | Custom implementation of `FocusParkingView` to hold rotary focus when needed. |\n| `fragment_container` | Main content container. Content fragments use this as the target layout. |\n| `restricted_message` | UX-restricted blocking view to be shown on instances of `BaseFragment`. |\n\n**Figure 1.** Dual pane layout\n\nTop-level preferences\n---------------------\n\nTop-level preferences are custom CarUiPreferences with a slightly modified layout to change\nthe preference height and background shape. There are many different ways to customize the look\nof these preferences:\n\n| Value | Description |\n|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------|\n| `res/layout/top_level_preference.xml` | Overlay the *entire* preference layout. |\n| `top_level_preference_min_height` | Minimum height of the top-level preference. Depending on content (for example, a subtitle is present), preferences may be taller than this value. |\n| `top_level_preference_corner_radius` | Radius of the corner rounding. |\n| `top_level_preference_background` | Background of the top-level preferences when not currently highlighted. |\n| `top_level_preference_highlight` | Background of top-level preferences when highlighted. |\n\nTop-level icons\n---------------\n\nFigure 2 illustrates how the top-level icons now consist of a vector icon inside a colored\nbackground shape. This shape is currently configured to support either an oval a rectangular\nshape. By default, shape is set to oval.\n\nTo change the default, modify the value in `config_top_level_icon_shape`\n(where 0 is rectangle and 1 is oval). The icons are created by insetting the foreground icon by\n`top_level_foreground_icon_inset` from the background shape. Each top-level icon has\na foreground color specified in `res/values/colors.xml` and a background color\nspecified in the `res/color` folder.\n\nTo create a customized appearance, you can override all color values.\n\n**Figure 2.** Top-level preference components\n\nIcons for injected preferences that fall into the categories specified by\n`config_top_level_injection_categories` are also treated as top-level icons.\nThe provided icons are inset by the same value and into the same shape as specified for\nall other top-level icons (see above). However, the background is determined by looking\nat the following attributes in this order:\n\n1. `com.android.settings.bg.argb` Meta data from the injecting app.\n2. `com.android.settings.bg.hint` Meta data from the injecting app.\n3. `top_level_injected_default_background` Specified in `res/values/colors.xml`.\n\nTo ignore the injecting app data and always use the default background, set\n`config_top_level_injection_background_always_use_default` to `true`."]]