ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
การปรับแต่งการแยกหน้าจอ
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
Android 12 เปิดตัวการออกแบบแบบ 2 แผง โดยมีเมนู L0 แบบคงที่ทางด้านซ้ายและแผงเนื้อหาทางด้านขวา ฟีเจอร์นี้จะมีตัวเลือกการปรับแต่งใหม่ๆ มากมาย หน้านี้จะอธิบายฟีเจอร์เหล่านั้นโดยละเอียดและอธิบายวิธีปรับแต่งค่ากําหนดของคุณเอง
เปลี่ยนกลับไปเป็นแผงเดียว
โดยค่าเริ่มต้น ตอนนี้ CarSettings จะแสดงมุมมองแบบ 2 แผงเมื่อหน้าต่างแอปมีความกว้างมากกว่าหรือเท่ากับ 1400dp และแสดงมุมมองแบบแผงเดียวหากไม่ใช่ หากต้องการปรับแต่งสิ่งนี้สำหรับอุปกรณ์ที่เฉพาะเจาะจง ให้ใช้การวางซ้อนทรัพยากรรันไทม์ (RRO) เพื่อกำหนดเป้าหมายค่าการกำหนดค่าที่จำเป็น ดังนี้
ค่า |
คำอธิบาย |
config_global_force_single_pane |
ตั้งค่าเป็น true หากต้องการให้แอปทั้งแอปทำงานในการกําหนดค่าแบบหน้าจอเดียว |
config_homepage_fragment_class |
ระบุข้อมูลโค้ดเริ่มต้นสําหรับหน้าแรก ในแผงคู่ ค่านี้จะใช้กับข้อมูลโค้ดเริ่มต้นในแผงเนื้อหา ในแผงเดียว ข้อมูลนี้ควรเป็นข้อมูลโค้ดหน้าแรก |
เนื่องจากกิจกรรม CarSettings แต่ละรายการอาจมี IA ที่กําหนดเอง ระบบจึงมีการจัดเตรียมการแมปคีย์ส่วนหัวเพื่อให้การปรับแต่งง่ายขึ้น ใน AndroidManifest.xml
กิจกรรมทุกรายการที่รองรับการแสดงผลแบบ 2 หน้าจอจะมี TOP_LEVEL_HEADER_KEY
ที่ระบุไว้ในข้อมูลเมตา
ค่านี้จะชี้ไปยังคีย์ที่ระบุใน res/values/header_keys.xml
ซึ่งแมปกับคีย์ค่ากําหนดของรายการเมนูระดับบนสุดที่ข้อมูลโค้ดเริ่มต้นอยู่
ดังนั้น หากมีการเปลี่ยนแปลงข้อมูลโค้ดเริ่มต้นของกิจกรรมหรือมีการจัดเรียง IA ใหม่เพื่อให้ข้อมูลโค้ดหนึ่งๆ อยู่ภายใต้ค่ากําหนดระดับบนสุดอื่น คุณสามารถอัปเดตการแมปที่เกี่ยวข้องในไฟล์ header_keys.xml
เพื่อระบุค่าที่ถูกต้องได้
ปรับแต่งเลย์เอาต์กิจกรรม
เลย์เอาต์สำหรับ BaseCarSettingsActivity
อยู่ใน
res/layout/car_setting_activity
และในส่วนต่อไปนี้
ค่า |
คำอธิบาย |
top_level_menu |
รายการเมนูระดับบนสุดที่แสดงในการกําหนดค่าแบบ 2 แผง ความกว้างของส่วนนี้ระบุโดย top_level_menu_width เลย์เอาต์ฐานของแชสซี (ที่มีแถบเครื่องมือ) จะล้อมรอบมุมมองนี้ |
top_level_divider |
เส้นแนวตั้งที่แบ่งแผง 2 แผงออกและปรับความกว้างได้โดยใช้ top_level_divider_width |
fragment_container_wrapper |
เลย์เอาต์ของ Wrapper สำหรับแผงเนื้อหา (หรือแผงหลักในการกําหนดค่าแบบแผงเดียว)
เลย์เอาต์ฐานของแชสซี (ที่มีแถบเครื่องมือ) จะรวมอยู่ในมุมมองนี้ |
settings_focus_parking_view |
การใช้งาน FocusParkingView ที่กําหนดเองเพื่อโฟกัสแบบหมุนเมื่อจําเป็น |
fragment_container |
คอนเทนเนอร์เนื้อหาหลัก เนื้อหาที่แสดงเป็นตัวอย่างจะใช้รูปแบบนี้เป็นเลย์เอาต์เป้าหมาย |
restricted_message |
มุมมองการบล็อกที่จำกัด UX เพื่อแสดงในอินสแตนซ์ของ BaseFragment |

รูปที่ 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
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ 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`."]]