ตั้งแต่ Android 12 เป็นต้นไป การออกแบบ Material You จะเน้นไปที่การแสดงออกและความลื่นไหลในระบบปฏิบัติการ Android โดยมีเป้าหมายเพื่อช่วยให้ผู้ใช้สร้างและเป็นเจ้าของประสบการณ์เดียวที่เชื่อมโยงกันซึ่งตอบสนองความต้องการของพวกเขา ในฐานะพันธมิตร Android ขอแนะนำให้รวมวัสดุที่คุณออกแบบไว้ในอุปกรณ์ Android ของคุณในด้านต่อไปนี้:
- สีแบบไดนามิก
- การเคลื่อนไหว
- วิดเจ็ต
สีแบบไดนามิก
สีแบบไดนามิกคือหัวใจสำคัญของการออกแบบ Material You และเป็นส่วนสำคัญของกลยุทธ์หลายปีของ Android เพื่อนำการปรับแต่งที่เรียบง่ายและลึกซึ้งยิ่งขึ้นมาสู่ผู้ใช้ในแบบที่ไม่มีอุปกรณ์อื่นทำ วัสดุที่คุณนำเสนอ:
ผู้ใช้และนักพัฒนามีเรื่องราวความเป็นส่วนตัวที่หลากหลายและสม่ำเสมอซึ่งมีอยู่ในอุปกรณ์ Android ทุกรุ่น
โอกาสในการ OEM ของ Android ในการพัฒนา UI ของระบบและแอปบุคคลที่หนึ่งต่อไปในลักษณะที่สอดคล้องกับฮาร์ดแวร์และสีแบรนด์ ผู้ผลิต และรูปแบบ
หากต้องการใช้ประโยชน์จากสีแบบไดนามิก ให้ใช้เรื่องราวการแยกสีของ Android 12 Material You เป็นส่วนสำคัญของซอฟต์แวร์ที่เสนอให้กับผู้ใช้ บนอุปกรณ์ ให้ใช้ตรรกะการแยกสีที่อยู่ใน AOSP โดยเฉพาะตรรกะที่ใช้สีต้นฉบับของวอลเปเปอร์หรือธีมเดียวแล้วส่งออกผ่าน API สี 65 สี สำหรับข้อกำหนดสีไดนามิก โปรดดูที่ การใช้สีไดนามิก
การไหลของสีไดนามิกเต็มรูปแบบประกอบด้วยสี่ขั้นตอน ดังภาพด้านล่าง:
รูปที่ 1 วัสดุ คุณไดนามิกสีไหล
ผู้ใช้เปลี่ยนรูปพื้นหลังหรือธีมผ่านตัวเลือก OEM
ผู้ใช้เลือกอย่างใดอย่างหนึ่งต่อไปนี้:
ธีมของอุปกรณ์ เมื่อเลือกแล้ว Android จะเลือกสีต้นทางเดียวที่ตรงตามข้อกำหนดโดยอัตโนมัติ
วอลล์เปเปอร์ + ธีมใหม่ เมื่อเลือก ตรรกะ AOSP จะเลือกสีต้นทางเดียวจากวอลเปเปอร์ที่เลือกโดยอัตโนมัติ
AOSP ขยายแหล่งสีเดียวออกเป็น 5 โทนสี โดยแต่ละสีมี 13 โทนสี ตามลอจิก AOSP ซึ่งจะเติมแอตทริบิวต์สี 65 สี
UI ของแอปใช้แอตทริบิวต์สี 65 สีในลักษณะที่สอดคล้องกันทั่วทั้งระบบนิเวศของแอป Android เราขอแนะนำให้คุณใช้จานสีเดียวกันสำหรับ UI ระบบของอุปกรณ์และแอปเฉพาะของ OEM
แพตช์ Android 12
หากต้องการรับตรรกะตั้งแต่ต้นจนจบสำหรับการแยกสีวอลเปเปอร์และเพื่อให้อุปกรณ์เติม API 65 สีในลักษณะที่สอดคล้องกับระบบนิเวศ ให้รวมแพตช์ต่อไปนี้ในการใช้งาน Android 12 ของคุณ:
บังคับ
แนะนำอย่างยิ่ง
- แก้ไขสภาพการแข่งขันเมื่อตั้งค่า sysprops สีบูต
- อนุญาตให้มีการแจ้งเตือนการวางซ้อนเกี่ยวกับการเปลี่ยนแปลงธีม
- แก้ไขสภาพการแข่งขันเมื่อตั้งค่าสีบูต sysprops (รอบ 2)
- ย้าย FeatureFlags ไปยังแพ็คเกจแฟล็ก
- ใช้การสนับสนุนธีมผู้ใช้หลายรายอย่างถูกต้อง
- แก้ไขตัวเลือกสีวอลเปเปอร์ที่ระบุหายไปหลังจากรีบูต
- แก้ไขข้อผิดพลาดในการคำนวณเฉดสีระดับอุดมศึกษา
- ไม่อนุญาตให้แอปพื้นหลังเปลี่ยนธีม
การระบุสีที่กำหนดเองบน ThemePicker
หากคุณใช้แอป AOSP ThemePicker แอป WallpaperPicker จะแสดงส่วนสีหากตรงตามเงื่อนไข ทั้งสอง ข้อต่อไปนี้:
-
flag_monet
บนframeworks/base/packages/SystemUI/res/values/flags.xml
เป็นtrue
- APK stub ระบบที่มีชื่อแพ็กเกจถูกกำหนดไว้ใน
themes_stub_package
ในไฟล์packages/apps/ThemePicker/res/values/override.xml
รูปแบบ Stub APK
เวอร์ชันตัวอย่างของ APK นี้สามารถพบได้ใน packages/apps/ThemePicker/themes
APK นี้ควรมีเฉพาะแหล่งข้อมูล โดยให้รายละเอียดเกี่ยวกับ สีพื้นฐาน ที่มีอยู่และชื่อ
ต้นขั้วควรมีไฟล์ XML ภายใต้ res/xml
โดยมีรูปแบบต่อไปนี้:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="color_bundles">
<item>color1</item>
<item>color2</item>
<item>color3</item>
<item>color4</item>
</array>
<string name="bundle_name_color1">Blue</string>
<string name="bundle_name_color2">Red</string>
<string name="bundle_name_color3">Yellow</string>
<string name="bundle_name_color4">Green</string>
</resources>
ในไฟล์นี้ แต่ละ item
ภายใน color_bundles
มีชื่อที่แตกต่างกัน ตราบใดที่สตริงด้านล่างมีชื่อว่า bundle_name_ item
ควรมีสตริง bundle_name_ item
สำหรับแต่ละสี พร้อมด้วยชื่อที่สื่อความหมายสำหรับแต่ละสี สิ่งเหล่านี้สามารถแปลได้โดยการเพิ่มสตริงที่แปลที่เกี่ยวข้องลงในไดเร็กทอรี res/values- language code
ค่าสีจริงอาจเป็นได้ทั้งบน XML เดียวกันหรือในไฟล์ XML ทรัพยากรที่แยกต่างหากโดยมีรูปแบบต่อไปนี้:
<resources>
<color name="color_primary_color1">#0000FF</color>
<color name="color_secondary_color1">#0000FF</color>
<color name="color_primary_color2">#ff0000</color>
<color name="color_secondary_color2">#ff0000</color>
<color name="color_primary_color3">#ffff00</color>
<color name="color_secondary_color3">#ffff00</color>
<color name="color_primary_color4">#00ff00</color>
<color name="color_secondary_color4">#00ff00</color>
</resources>
สำหรับแต่ละรายการในอาร์เรย์ชุดสี ควรมี color_primary_ item
และ color_secondary_ item
(และทั้งสองสีควรมีสีเดียวกัน) ค่าสำหรับรายการ color
เหล่านี้เป็นรหัสสีจริงสำหรับแต่ละสีเพื่อแสดงในส่วน สีพื้นฐาน
ขั้นตอนที่ 1: สร้างประสบการณ์การใช้ธีมของผู้ใช้
เครื่องมือเลือกธีมคือจุดที่ผู้ใช้มีส่วนร่วมกับความสามารถในการปรับแต่ง Material You ใหม่ และอาจเลือกระหว่างตัวเลือกสีหรือค่าที่ตั้งไว้ล่วงหน้า เนื่องจากเหมาะกับผลิตภัณฑ์และข้อมูลประชากรผู้ใช้ของคุณ คุณจึงสามารถนำเสนอประสบการณ์การใช้งานสีและการปรับเปลี่ยนในแบบของคุณที่สมบูรณ์ยิ่งขึ้นแก่ผู้ใช้ได้ ผ่านการใช้ เครื่องมือเลือกธีม หรือ เครื่องมือเลือกวอลเปเปอร์
- เมื่อใช้เครื่องมือเลือกวอลเปเปอร์ การแยกสีวอลเปเปอร์จะเปิดไว้ตามค่าเริ่มต้น อย่างไรก็ตาม คุณสามารถปรับแต่งตัวเลือกบางอย่างเพื่อให้ตัวเลือกเพิ่มเติมแก่ผู้ใช้ได้
ขั้นตอนที่ 2: แยกสีวอลเปเปอร์เป็นสีต้นฉบับ
หากต้องการเปิดใช้งานการแยกสีวอลเปเปอร์ ให้เลือกแพตช์ Android 12 ที่ระบุไว้ด้านบน (ฟังก์ชันนี้จะเปิดใช้งานตามค่าเริ่มต้นในรุ่น AOSP ในอนาคต) ตรรกะ AOSP ที่ทริกเกอร์การแยกวอลเปเปอร์เริ่มต้นที่ frameworks/base/packages/SystemUI/src/com/android/systemui/theme/ThemeOverlayController.java
บน ThemeOverlayController#mOnColorsChangedListener
โดยใช้ WallpaperManager#onWallpaperColorsChanged
เราขอแนะนำให้ใช้ตรรกะ AOSP ที่ไม่มีการแก้ไขเพื่อให้แน่ใจว่าได้รับประสบการณ์การพัฒนาที่สอดคล้องกัน
ตามค่าเริ่มต้น ตรรกะจะเลือกสีความถี่สูงสุดที่เหมาะกับการใช้งาน หากต้องการใช้ประโยชน์จากสีต้นฉบับอื่นๆ ที่ส่งคืนโดยอัลกอริธึม และนำเสนอสีเหล่านั้นแก่ผู้ใช้ในตัวเลือกธีม ให้ใช้ ColorScheme#getSeedColors(wallpaperColors: WallpaperColors)
เพื่อให้เหมาะสมกับการใช้งาน สีต้นทาง (ไม่ว่าจะดึงมาจากวอลเปเปอร์หรือค่าที่ตั้งไว้ล่วงหน้าที่ผู้ใช้เลือก) จะต้องมีค่าโคร มา CAM16 ขั้นต่ำที่ 5 เพื่อให้แน่ใจว่าสีต้นทางจะไม่ได้รับผลกระทบจากโทนสีเข้มเมื่อแปลงจากสีเดียวเป็น 65 โทนสี และยังคงเป็นตัวแทนของตัวเลือกของผู้ใช้ หากต้องการอ่านและแก้ไขสีใน CAM16 ให้ใช้ Cam#fromInt
หรือ Cam#getInt
การใช้ชุดสีที่ไม่ใช่ไดนามิก สำหรับอุปกรณ์ที่ไม่รองรับการแยกสีวอลเปเปอร์ คุณยังสามารถมั่นใจได้ว่าแอป Google และแอปของบุคคลที่สามที่สนับสนุนสีไดนามิกจะดูดีโดยดำเนินการดังต่อไปนี้:
- ใช้พาเล็ต Material ดีฟอลต์โดยการปิดใช้
flag_monet
บนframeworks/base/packages/SystemUI/res/values/flags.xml
- ตรวจสอบให้แน่ใจว่าผู้ใช้ยังคงปรับแต่งระบบปฏิบัติการของตนได้โดยใช้เครื่องมือเลือกธีมที่กำหนดไว้ล่วงหน้า
ขั้นตอนที่ 3: ขยายสีต้นฉบับเป็น API สี
ด้วยการใช้สีต้นทางเดียวที่ได้มาจากขั้นตอนก่อนหน้า Android จะสร้างชุดโทนสีที่ไม่ซ้ำกัน 5 ชุด (สำเนียง 1-3, สีกลาง 1-2) แต่ละชุดประกอบด้วย 13 สี และแต่ละสีรวมถึงค่าความสว่างที่แตกต่างกัน (0 ถึง 1,000) สำหรับ มีทั้งหมด 65 สี ตรรกะที่ให้ไว้ใน แพตช์ Android 12 ใช้การขยายสีนี้อย่างถูกต้อง รายละเอียดที่ให้ไว้ด้านล่างอธิบายถึงการใช้งาน
เพื่อความสอดคล้องของนักพัฒนา จานสี 5 โทนสี (สำเนียง 1, สำเนียง 2, สำเนียง 3, เป็นกลาง 1, เป็นกลาง 2) และ 13 สีที่สอดคล้องกันจะต้องขึ้นอยู่กับสีต้นทางเดียวโดยมีการเปลี่ยนแปลงตามลำดับกับค่าโครมาและเฉดสี CAM16 ตามที่เขียนไว้ด้านล่าง:
- โครมา: ใช้ "16"
- เว้: เช่นเดียวกับแหล่งที่มา
- โครมา: ใช้ "32"
- ฮิว: หมุนไปในทางบวก 60 องศา
- โครมา: ใช้ "4"
- เว้: เช่นเดียวกับแหล่งที่มา
- โครมา: ใช้ "8"
- เว้: เช่นเดียวกับแหล่งที่มา
CTS มีการทดสอบเพื่อตรวจสอบความส่องสว่างและการเรียก API ของสี หากต้องการรัน ให้ใช้ atest SystemPalette
ขั้นตอนที่ 4: ใช้สีไดนามิกในแอปและ UI ของระบบ
หลังจากตั้งค่าสีไดนามิกบนอุปกรณ์แล้ว แอพจะปฏิบัติตามหลักเกณฑ์ด้านวัสดุเพื่อใช้สีต่างๆ หลักเกณฑ์ด้านวัสดุมีกำหนดเผยแพร่บน Material.io ภายในวันที่ 26 ตุลาคม 2021 เพื่อให้แอปของบุคคลที่สามนำไปใช้ สำหรับ System UI และแอปบุคคลที่หนึ่ง เราขอแนะนำอย่างยิ่งให้ผสานรวมสีไดนามิกตลอดประสบการณ์ผู้ใช้ในลักษณะที่เหมาะกับฮาร์ดแวร์และแบรนด์ของคุณ และช่วยให้คุณสร้างความแตกต่างให้กับอุปกรณ์ของคุณ
สำหรับคำแนะนำสีไดนามิกทั่วไป โปรดดูดังต่อไปนี้:
ใช้ สีที่ถูกเน้น สำหรับองค์ประกอบพื้นหน้าในแอพและ UI ของระบบ:
@android:color/system_accent1_0 … 1000 // most-used foreground color group @android:color/system_accent2_0 … 1000 // alternate accent, used for surfaces @android:color/system_accent3_0 … 1000 // playful, analogous color
ใช้ สีที่เป็นกลาง สำหรับองค์ประกอบพื้นหลังในแอปและ UI ของระบบ:
@android:color/system_neutral1_0 … 1000 // most-used background color group @android:color/system_neutral2_0 … 1000 // used for higher-elevation surfaces
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Material You จับคู่สี และวิธีใช้ API ใน SysUI โปรดดู แหล่งข้อมูลเพิ่มเติม
ขั้นตอนที่ 5: เพิ่มตัวเลือกสีแบบไดนามิกในการใช้งาน AOSP WallpaperPicker ของคุณ
สร้างสำหรับ Android 13 ขึ้นไป
ตั้งแต่ Android 13 เป็นต้นไป android.theme.customization.accent_color
เลิกใช้งานแล้ว มีการเพิ่มแอตทริบิวต์ใหม่ android.theme.customization.theme_style
เพื่อรองรับตัวแปรสีที่แตกต่างกัน ขณะนี้เรามีสี่รูปแบบใน codebase ดังนี้:
TONAL_SPOT = Default Material You theme since Android S.
VIBRANT = Theme where accent 2 and 3 are analogous to accent 1.
EXPRESSIVE = Highly chromatic theme.
SPRITZ = Desaturated theme, almost grayscale.
สิ่งเหล่านี้จะถูกส่งไปยัง Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES
ดังที่แสดงใน JSON ด้านล่าง:
{
"android.theme.customization.system_palette":"B1611C",
"android.theme.customization.theme_style":"EXPRESSIVE"
}
สร้างสำหรับ Android 12 และต่ำกว่า
เมื่อใช้ตัวเลือกธีมแบบกำหนดเอง อุปกรณ์จะต้องส่งสีต้นทางที่ถูกต้องไปที่ Settings.Secure.THEME_CUSTOMIZATION_OVERLAY_PACKAGES
โดยจัดเตรียมไฟล์ JSON ในรูปแบบต่อไปนี้ (โดยที่ 746BC1
คือตัวอย่างสีต้นทางที่ถูกต้อง):
{
"android.theme.customization.system_palette":"746BC1",
"android.theme.customization.accent_color":"746BC1"
}
การทำเช่นนี้จะข้ามการแยกสีวอลเปเปอร์ (ขั้นตอนที่ 2) และขยายสีต้นฉบับที่ให้ไว้เป็นแอตทริบิวต์สี 65 สีโดยตรง (ขั้นตอนที่ 3)
ขั้นตอนที่ 6: ยื่นตั๋ว
นอกจากการรวมระบบแล้ว คุณต้องยื่นตั๋วและแจ้งชื่อแบรนด์ของคุณให้เราทราบ ( Build.MANUFACTURER
) เนื่องจากแอปของบุคคลที่สามส่วนใหญ่ใช้ ส่วนประกอบวัสดุสำหรับ Android เพื่อแสดงสีไดนามิก เราจึงใช้ รายการที่อนุญาต แบบฮาร์ดโค้ดเพื่อบอกว่าอุปกรณ์ใดได้รวมฟีเจอร์ ชุดโทนสีไดนามิก ไว้
การเคลื่อนไหว
การเคลื่อนไหวที่ลื่นไหลทำให้อุปกรณ์รู้สึกทันสมัยและพรีเมียม ในการสร้างและรักษาความไว้วางใจและความสุขของนักพัฒนา การเลื่อนและการกระเพื่อมเป็นสองส่วนสำคัญของการเคลื่อนไหวที่ลื่นไหลซึ่งจำเป็นต้องมีลักษณะและความรู้สึกที่สอดคล้องกัน
การใช้ Overscroll ในระบบปฏิบัติการของคุณ
Android 12 มีการเคลื่อนไหวโอเวอร์สโครลแบบไดนามิกที่ตอบสนองมากขึ้นในรูปแบบของการยืดมุมมอง ซึ่งจะแสดงเมื่อผู้ใช้พยายามเลื่อนผ่านขอบของรายการ ตัวอย่างแสดงไว้ด้านล่าง:
รูปที่ 2 เอฟเฟกต์โอเวอร์สโครลของ Android 12 ดังที่แสดงในการตั้งค่า
เพื่อความสอดคล้องของนักพัฒนา ตรวจสอบให้แน่ใจว่าเอฟเฟกต์การเลื่อนโดยรวมบนอุปกรณ์ของคุณมีความคล้ายคลึงกับตัวอย่างต่อไปนี้:
บนอุปกรณ์ที่คืนค่าเป็นจริงสำหรับ
ActivityManager.isHighEndGfx()
เอฟเฟกต์การเลื่อนเกินจะเป็นการยืดหน้าจอแบบไม่เป็นเชิงเส้น (ดังที่แสดงด้านบน)บนอุปกรณ์ที่มีประสิทธิภาพต่ำ เอฟเฟกต์การยืดจะถูกทำให้ง่ายขึ้นเป็นการยืดเชิงเส้น (เพื่อลดภาระบนระบบ)
การใช้การเลื่อนเกินในแอปบุคคลที่หนึ่ง
เมื่อใช้มุมมองแบบกำหนดเอง คุณอาจต้องปรับแต่งแอพและ UI ของระบบบางตัวที่ใช้เอฟเฟกต์แบบยืด
หากต้องการรองรับการเลื่อนแบบยืดออก ให้อัปเกรดเป็นไลบรารีล่าสุด:
-
androidx.recyclerview:recyclerview:1.3.0-alpha01
สำหรับRecyclerView
-
androidx.core:core:1.7.0-alpha01
สำหรับNestedScrollView
และEdgeEffectCompat
-
androidx.viewpager:viewpager:1.1-alpha01
สำหรับViewPager
-
สำหรับเค้าโครงแบบกำหนดเองที่ใช้
EdgeEffect
ให้พิจารณาการเปลี่ยนแปลง UX ต่อไปนี้:เมื่อใช้การเลื่อนแบบยืดออก ผู้ใช้ไม่ควรโต้ตอบกับเนื้อหาของเค้าโครงในขณะที่กำลังขยาย ผู้ใช้ควรจัดการเฉพาะส่วนที่ยืดออกเท่านั้น และไม่สามารถกดปุ่มในเนื้อหาได้ เป็นต้น
เมื่อผู้ใช้สัมผัสเนื้อหาในขณะที่ภาพเคลื่อนไหว
EdgeEffect
เกิดขึ้น ผู้ใช้ควรจับภาพเคลื่อนไหวและได้รับอนุญาตให้จัดการการยืดออก ค่าการดึงปัจจุบันหาได้จากEdgeEffectCompat.getDistance()
หากต้องการจัดการค่าการดึงและส่งกลับจำนวนที่ใช้ ให้ใช้
onPullDistance()
สิ่งนี้ช่วยให้นักพัฒนาเปลี่ยนจากการยืดเป็นการเลื่อนได้อย่างราบรื่นในขณะที่นิ้วคลายเนื้อหาผ่านตำแหน่งเริ่มต้นเมื่อทำงานกับการเลื่อนแบบซ้อน หากเนื้อหาถูกยืด การยืดควรใช้การเคลื่อนไหวแบบสัมผัสก่อนเนื้อหาที่ซ้อนกัน มิฉะนั้น การซ้อนอาจเลื่อนเมื่อนิ้วเปลี่ยนทิศทางแทนที่จะปล่อยการยืด
สำหรับรายละเอียดเกี่ยวกับการเลื่อนเกิน โปรดดูที่ ทำให้ท่าทางการเลื่อนเคลื่อนไหว
การใช้ระลอก (การตอบสนองแบบสัมผัส) ในระบบปฏิบัติการของคุณ
Android 12 มีระลอกคลื่นการสัมผัสที่นุ่มนวลและละเอียดยิ่งขึ้นเพื่อให้ข้อเสนอแนะแก่ผู้ใช้เมื่อแตะลง
รูปที่ 3 เอฟเฟกต์ระลอกคลื่นของ Android 12 พร้อมแอนิเมชั่นการเติมที่นุ่มนวลขึ้น
เพื่อให้นักพัฒนาคาดการณ์ได้และเพื่อมอบประสบการณ์ผู้ใช้ที่ยอดเยี่ยม ตรวจสอบให้แน่ใจว่าเอฟเฟกต์ระลอกคลื่นบนอุปกรณ์ของคุณคล้ายกับตัวอย่างที่แสดงด้านบน แม้ว่าคุณไม่จำเป็นต้องดำเนินการขั้นตอนการผสานรวมใดๆ เพื่อรองรับเอฟเฟกต์ระลอกคลื่น แต่คุณควรทดสอบผลกระทบต่ออุปกรณ์ของคุณเพื่อตรวจสอบการถดถอยโดยไม่ได้ตั้งใจที่เกิดขึ้นในการใช้งานของคุณ
วิดเจ็ต
วิดเจ็ตเป็นองค์ประกอบสำคัญของอุปกรณ์ Android Android 12 มี API และความสามารถของ API ใหม่ๆ ที่ OEM ทั้งหมดควรรองรับ
ในระบบปฏิบัติการของคุณ รองรับ API ของนักพัฒนาที่เกี่ยวข้องกับเค้าโครงวิดเจ็ต ขนาด และพารามิเตอร์ซอฟต์แวร์ (เช่น ขนาดมุมโค้งมน) การใช้งานของคุณควรสนับสนุนวิดเจ็ตอย่างถูกต้องในการจัดเตรียมพารามิเตอร์ผ่าน API และในการรับประกันว่าวิดเจ็ตมีขนาดใหญ่และกำหนดค่าได้โดยผู้ใช้
ในแอปของคุณ ให้ใช้ประโยชน์จากความสามารถของ API ใหม่เพื่ออัปเดตหรือสร้างวิดเจ็ตบุคคลที่หนึ่งใหม่หากเป็นไปได้ สำหรับวิดเจ็ตแอปบุคคลที่หนึ่งทั้งหมดในขอบเขตของคุณ ให้ดำเนินการตามรายการตรวจสอบสำหรับนักพัฒนาด้านล่าง
- ลำดับความสำคัญจะขึ้นอยู่กับคำแนะนำจากแพลตฟอร์ม
- หากต้องการทราบรายละเอียดเกี่ยวกับคำแนะนำ โปรดไปที่ลิงก์ในคอลัมน์การเปลี่ยนแปลง
พื้นที่ เปลี่ยน ลำดับความสำคัญในการดำเนินการ ปรับปรุงประสบการณ์ที่บ้าน เพิ่มตัวอย่างที่ปรับขนาดได้ ป1 เพิ่มคำอธิบายวิดเจ็ต ป1 ทำให้ง่ายต่อการปรับแต่งวิดเจ็ตในแบบของคุณ P2 (ไม่จำเป็น) เปิดใช้งานการเปลี่ยนแปลงที่ราบรื่นยิ่งขึ้น ป0 หลีกเลี่ยงการออกอากาศแทรมโพลีน ป0 ใช้แนวทางวิดเจ็ต ปรับปรุงขนาดและเค้าโครงวิดเจ็ต ป2 ใช้สีแบบไดนามิก ป0 ใช้มุมโค้งมน ป0 เพิ่มปุ่มผสมใหม่ ป2 ลดความซับซ้อนของโค้ดวิดเจ็ตที่มีอยู่ ลดความซับซ้อนของคอลเลกชัน RemoteView ป2 ลดความซับซ้อนของรันไทม์ RemoteView ป2
แหล่งข้อมูลเพิ่มเติม
การใช้สี SysUI
(สำเนียง1 = A1, สำเนียง2 = A2, สำเนียง3 = A3, เป็นกลาง1 = N1, เป็นกลาง2 = N2)
รูปที่ 4 การใช้สีแบบไดนามิกใน System UI
การอัปเดตแอตทริบิวต์สีของไลบรารีวัสดุ
วัสดุจะอัปเดตแอตทริบิวต์ของธีมในรุ่นที่กำลังจะมาถึงโดยการสร้างบทบาทสีที่ใช้ในการจัดหาสีให้กับมุมมองที่เฉพาะเจาะจง
บทบาทสี | แอตทริบิวต์ธีม Android | ธีมแสง สีไดนามิก | ธีมสีเข้ม สีไดนามิก |
---|---|---|---|
หลัก | สีหลัก | system_accent1_600 | system_accent1_200 |
ในระดับประถมศึกษา | colorOnPrimary | system_accent1_0 | system_accent1_800 |
รอง | สีรอง | system_accent2_600 | system_accent2_200 |
ในระดับมัธยมศึกษา | colorOnSecondary | system_accent2_0 | system_accent2_800 |
ข้อผิดพลาด | สีข้อผิดพลาด | ไม่มี (red_600) | ไม่มี (red_200) |
เมื่อเกิดข้อผิดพลาด | colorOnError | ไม่มี (สีขาว) | ไม่มี (red_900) |
พื้นหลัง | android:colorBackground | system_neutral1_10 | system_neutral1_900 |
บนพื้นหลัง | สีบนพื้นหลัง | system_neutral1_900 | system_neutral1_100 |
พื้นผิว | สีพื้นผิว | system_neutral1_10 | system_neutral1_900 |
บนพื้นผิว | สีบนพื้นผิว | system_neutral1_900 | system_neutral1_100 |
วัสดุจะอัปเดตแอตทริบิวต์สถานะด้วยตัวชี้ต่อไปนี้:
บทบาทสี | แอตทริบิวต์ธีม Android | ธีมแสง สีไดนามิก | ธีมสีเข้ม สีไดนามิก |
---|---|---|---|
เนื้อหาของรัฐหลัก | colorPrimaryStateเนื้อหา | system_accent1_700 | system_accent1_200 |
เลเยอร์สถานะหลัก | colorPrimaryStateLayer | system_accent1_600 | system_accent1_300 |
เนื้อหาของรัฐรอง | colorSecondaryStateเนื้อหา | system_accent2_700 | system_accent2_200 |
เลเยอร์สถานะทุติยภูมิ | colorSecondaryStateLayer | system_accent2_600 | system_accent2_300 |
เกี่ยวกับเนื้อหาของรัฐหลัก | เนื้อหา colorOnPrimaryState | system_accent1_0 | system_accent1_800 |
บนเลเยอร์สถานะหลัก | colorOnPrimaryStateLayer | system_accent1_900 | system_accent1_800 |
เกี่ยวกับเนื้อหาของรัฐทุติยภูมิ | colorOnSecondaryStateContent | system_accent2_0 | system_accent2_800 |
บนเลเยอร์สถานะทุติยภูมิ | colorOnSecondaryStateLayer | system_accent2_900 | system_accent2_800 |
เกี่ยวกับเนื้อหาสถานะคอนเทนเนอร์หลัก | colorOnPrimaryContainerStateContent | system_accent1_900 | system_accent1_900 |
บนเลเยอร์สถานะคอนเทนเนอร์หลัก | colorOnPrimaryContainerStateLayer | system_accent1_900 | system_accent1_900 |
เกี่ยวกับเนื้อหาสถานะคอนเทนเนอร์รอง | colorOnSecondaryContainerStateContent | system_accent2_900 | system_accent2_900 |
บนชั้นสถานะคอนเทนเนอร์รอง | colorOnSecondaryContainerStateLayer | system_accent2_900 | system_accent2_900 |
เกี่ยวกับเนื้อหาสถานะคอนเทนเนอร์ระดับอุดมศึกษา | colorOnTertiaryContainerStateContent | system_accent3_900 | system_accent3_900 |
บนเลเยอร์สถานะคอนเทนเนอร์ระดับอุดมศึกษา | colorOnTertiaryContainerStateLayer | system_accent3_900 | system_accent3_900 |
บนเนื้อหาสถานะพื้นผิว | เนื้อหา colorOnSurfaceState | system_neutral1_900 | system_neutral1_100 |
บนเลเยอร์สถานะพื้นผิว | colorOnSurfaceStateLayer | system_neutral1_900 | system_neutral1_100 |
บนเนื้อหาสถานะตัวแปร Surface | colorOnSurfaceVariantStateContent | system_neutral2_700 | system_neutral2_200 |
บนเลเยอร์สถานะตัวแปรพื้นผิว | colorOnSurfaceVariantStateLayer | system_neutral2_700 | system_neutral2_200 |
เนื้อหาสถานะข้อผิดพลาด | colorErrorStateเนื้อหา | สีแดง800 | สีแดง200 |
คำถามที่พบบ่อย
การสกัดสี
เมื่อผู้ใช้เปลี่ยนวอลเปเปอร์ การแยกสีจะดำเนินการโดยอัตโนมัติหรือจำเป็นต้องเรียกใช้จากที่ใดที่หนึ่งหรือไม่
ด้วย แพตช์ Android 12 การแยกสีวอลเปเปอร์จะ เปิดตามค่าเริ่มต้น
ThemeOverlayController.java
ทริกเกอร์ตรรกะด้วย ThemeOverlayController#mOnColorsChangedListener
และ WallpaperManager#onWallpaperColorsChanged
สำหรับ วอลเปเปอร์สด หรือ วอลเปเปอร์วิดีโอ เราจะรู้ได้ไหมว่า การแยกสี จะนำสีออกจากหน้าจอเมื่อใด ผู้ใช้บางรายอาจต้องการสีจากเฟรมสุดท้ายเนื่องจากจะแสดงเป็นส่วนใหญ่
การแยกสีจะถูกทริกเกอร์เมื่อผู้ใช้ตั้งค่าวอลเปเปอร์หรือหลังจากรอบพลังงานหน้าจอ (เพื่อตอบสนองต่อ WallpaperEngine#notifyColorsChanged
) เหตุการณ์ WallpaperColors
สุดท้าย (จากวอลเปเปอร์เคลื่อนไหว) จะถูกนำไปใช้หลังจากที่ผู้ใช้ปิดหน้าจอแล้วเปิดใหม่อีกครั้ง
เครื่องมือเลือกธีม/วอลเปเปอร์
ฉันจะเปิดใช้งานตัวเลือกธีมเพื่อแสดงสีต้นฉบับหลายสีเพื่อให้ผู้ใช้เลือกนอกเหนือจากสีความถี่สูงสุดได้อย่างไร มีวิธีรับสีเหล่านั้นจากตรรกะการแยกหรือไม่?
ใช่. ในตัวเลือกธีมของคุณ คุณสามารถใช้ ColorScheme#getSeedColors(wallpaperColors: WallpaperColors)
ได้
มีฟีเจอร์ชื่อ Pixel เป็น ไอคอนธีม มันรวมอยู่ในแพตช์ทั้งสามที่คุณแชร์หรือไม่? OEM สามารถนำสิ่งนั้นไปใช้ได้อย่างไร?
ไม่ ไอคอนตามธีมยังอยู่ในรุ่นเบต้าและไม่มีให้บริการใน Android 12
มีวิธีใช้แอป Google Wallpaper โดยเปิดใช้งานการแยกสีและคุณสมบัติการเลือกหรือไม่?
ใช่. คุณสมบัตินี้สามารถนำไปใช้ในแอป Google Wallpaper เวอร์ชันล่าสุดได้โดยทำตามขั้นตอนการรวมที่อธิบายไว้ก่อนหน้าของหน้านี้
ติดต่อ TAM ของคุณเพื่อขอรายละเอียดเพิ่มเติม
Google สามารถแชร์แอปหรือซอร์สโค้ดเพื่อให้ OEM สามารถใช้การแสดงตัวอย่างสีไดนามิกเวอร์ชันของตนเองในเมนูการตั้งค่า ซึ่งมีลักษณะคล้ายกับส่วนแสดงตัวอย่างที่แสดงในแอปตัวเลือกวอลเปเปอร์ของ Google ได้หรือไม่
คลาสหลักที่แสดงตัวอย่างคือ WallpaperPicker2
และ Launcher3
หน้าจอแสดงตัวอย่างวอลเปเปอร์คือ WallpaperSectionController
จะใช้ การแสดงตัวอย่าง หลังจากเปลี่ยนสีตามที่แสดงในแอป Google Wallpaper ได้อย่างไร
แอพตัวเลือกวอลเปเปอร์คาดว่า ContentProvider
จะพร้อมใช้งานจาก Launcher (ตัวเรียกใช้งานที่ใช้ Launcher3
มีอยู่แล้ว) การแสดงตัวอย่างจัดทำโดย GridCustomizationsProvider
ใน Launcher ซึ่งควรอ้างอิงใน ข้อมูลเมตา ของกิจกรรมหลักของ Launcher เพื่อให้แอปวอลเปเปอร์และสไตล์สามารถอ่านได้ ทั้งหมดนี้ถูกนำมาใช้ใน Launcher3 ของ AOSP และพร้อมใช้งานสำหรับ OEM