การปรับแต่งการแยกหน้าจอ

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

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

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