การปรับแต่งบานหน้าต่างคู่

Android 12 แนะนำการออกแบบ บานหน้าต่างคู่ ใหม่ โดยมีเมนู L0 แบบคงที่ทางด้านซ้ายและแผงเนื้อหาทางด้านขวา คุณลักษณะนี้แนะนำตัวเลือกการปรับแต่งใหม่มากมาย บทความนี้ให้รายละเอียดเกี่ยวกับคุณลักษณะเหล่านั้นและอธิบายวิธีปรับแต่งค่ากำหนดของคุณเอง

เปลี่ยนกลับเป็นบานหน้าต่างเดียว

ตามค่าเริ่มต้น CarSettings จะแสดงมุมมองบานหน้าต่างคู่เมื่อหน้าต่างแอปพลิเคชันมีความกว้างมากกว่าหรือเท่ากับ 1400dp และมุมมองบานหน้าต่างเดียว หากต้องการปรับแต่งสิ่งนี้สำหรับอุปกรณ์เฉพาะ ให้ใช้ Runtime Resource Overlay (RRO) เพื่อกำหนดเป้าหมายค่าการกำหนดค่าที่จำเป็น:

ค่า คำอธิบาย
config_global_force_single_pane ตั้งค่า true หากแอปพลิเคชันทั้งหมดทำงานในการกำหนดค่าแบบบานหน้าต่างเดียว
config_homepage_fragment_class ระบุส่วนเริ่มต้นสำหรับโฮมเพจ ในบานหน้าต่างคู่ ใช้สำหรับส่วนเริ่มต้นในบานหน้าต่างเนื้อหา ในบานหน้าต่างเดียว นี่ควรเป็นส่วนของหน้าแรก

ปุ่มส่วนหัว

เนื่องจากกิจกรรม CarSettings ที่แตกต่างกันสามารถมี IA ที่ปรับแต่งเองได้ การแมปคีย์ส่วนหัวจึงถูกจัดเตรียมไว้เพื่อทำให้การปรับแต่งง่ายขึ้น ใน 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 เค้าโครง 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 จะถือเป็นไอคอนระดับบนสุดเช่นกัน ไอคอนที่ให้มาจะถูกใส่เข้าไปด้วยค่าเดียวกันและอยู่ในรูปร่างเดียวกันกับที่ระบุไว้สำหรับไอคอนระดับบนสุดอื่นๆ ทั้งหมด (ดูด้านบน) อย่างไรก็ตาม พื้นหลังถูกกำหนดโดยดูจากแอตทริบิวต์ต่อไปนี้ในลำดับนี้:

  1. com.android.settings.bg.argb ข้อมูล Meta จากแอปพลิเคชันที่ฉีด
  2. com.android.settings.bg.hint ข้อมูล Meta จากแอปพลิเคชันที่ฉีด
  3. top_level_injected_default_background ระบุใน res/values/colors.xml

หากต้องการละเว้นข้อมูลแอปพลิเคชันที่ฉีดและใช้พื้นหลังเริ่มต้นเสมอ ให้ตั้งค่า config_top_level_injection_background_always_use_default true