หน้านี้มีรายละเอียดเกี่ยวกับการเพิ่มประสิทธิภาพวิดเจ็ตที่ไม่บังคับซึ่งพร้อมใช้งานตั้งแต่ Android 12 (ระดับ API 31) เป็นต้นไป ฟีเจอร์เหล่านี้เป็นฟีเจอร์ที่ไม่บังคับ แต่ใช้งานได้ง่ายและช่วยปรับปรุงประสบการณ์การใช้งานวิดเจ็ตของผู้ใช้
ดูวิธีอื่นๆ ในการปรับปรุงวิดเจ็ตได้ที่คู่มือ Compose เรื่องปรับปรุงวิดเจ็ต
ใช้สีแบบไดนามิก
ตั้งแต่ Android 12 เป็นต้นไป วิดเจ็ตจะใช้สีธีมของอุปกรณ์สำหรับปุ่ม พื้นหลัง และคอมโพเนนต์อื่นๆ ได้ ซึ่งจะช่วยให้การเปลี่ยนผ่านราบรื่นขึ้นและมีความสอดคล้องกันในวิดเจ็ตต่างๆ
คุณใช้สีแบบไดนามิกได้ 2 วิธีดังนี้
ใช้ธีมเริ่มต้นของระบบ (
@android:style/Theme.DeviceDefault.DayNight) ในเลย์เอาต์รูทใช้ธีม Material 3 (
Theme.Material3.DynamicColors.DayNight) จากไลบรารีคอมโพเนนต์ Material สำหรับ Android ซึ่งพร้อมใช้งานตั้งแต่คอมโพเนนต์ Material สำหรับ Android v1.6.0 เป็นต้นไป
เมื่อตั้งค่าธีมในเลย์เอาต์รูทแล้ว คุณจะใช้แอตทริบิวต์สีทั่วไปในรูทหรือหน่วยย่อยเพื่อเลือกสีแบบไดนามิกได้
ตัวอย่างแอตทริบิวต์สีที่คุณใช้ได้มีดังนี้
?attr/primary?attr/primaryContainer?attr/onPrimary?attr/onPrimaryContainer
ในตัวอย่างต่อไปนี้ที่ใช้ธีม Material 3 สีของธีมของอุปกรณ์คือ "ม่วง" สีเฉพาะจุดและพื้นหลังของวิดเจ็ตจะปรับตามโหมดสว่างและโหมดมืด ดังที่แสดงในรูปที่ 1 และ 2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/colorPrimaryContainer" android:theme="@style/Theme.Material3.DynamicColors.DayNight"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:tint="?attr/colorPrimaryContainer" android:src="@drawable/ic_cloud" /> <!-- Other widget content. --> </LinearLayout>
ความเข้ากันได้แบบย้อนหลังสำหรับสีแบบไดนามิก
สีแบบไดนามิกใช้ได้เฉพาะในอุปกรณ์ที่ใช้ Android 12 ขึ้นไปเท่านั้น หากต้องการระบุธีมที่กำหนดเองสำหรับเวอร์ชันที่ต่ำกว่า ให้สร้างธีมเริ่มต้นด้วยสีแบบกำหนดเองและตัวระบุใหม่ (values-v31) โดยใช้แอตทริบิวต์ธีมเริ่มต้น
ตัวอย่างการใช้ธีม Material 3 มีดังนี้
/values/styles.xml
<resources> <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight"> <!-- Override default colorBackground attribute with custom color. --> <item name="android:colorBackground">@color/my_background_color</item> <!-- Add other colors/attributes. --> </style> </resources>
/values-v31/styles.xml
<resources> <!-- Do not override any color attribute. --> <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" /> </resources>
/layout/my_widget_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="?android:attr/colorBackground" android:theme="@style/MyWidgetTheme" />
เปิดใช้การรองรับเสียง
App Actions ช่วยให้ Google Assistant แสดงวิดเจ็ตเพื่อตอบสนองต่อคำสั่งเสียงที่เกี่ยวข้องของผู้ใช้ได้ การกำหนดค่าวิดเจ็ตให้ตอบสนองต่อ Intent ในตัว (BII) จะช่วยให้แอปแสดงวิดเจ็ตบนแพลตฟอร์ม Assistant เช่น Android และ Android Auto ได้ในเชิงรุก ผู้ใช้มีตัวเลือกในการปักหมุดวิดเจ็ตที่ Assistant แสดงไว้ใน Launcher ซึ่งจะช่วยกระตุ้นการมีส่วนร่วมในอนาคต
เช่น คุณสามารถกำหนดค่าวิดเจ็ตสรุปการออกกำลังกายสำหรับแอปออกกำลังกายเพื่อดำเนินการตามคำสั่งเสียงของผู้ใช้ที่เรียกใช้ BII GET_EXERCISE_OBSERVATION ได้ Assistant จะแสดงวิดเจ็ตของคุณในเชิงรุกเมื่อผู้ใช้เรียกใช้ BII นี้โดยส่งคำขอ เช่น "Ok Google ฉันวิ่งไปกี่ไมล์ในสัปดาห์นี้ใน ExampleApp"
BII มีอยู่หลายสิบรายการซึ่งครอบคลุมการโต้ตอบของผู้ใช้หลายหมวดหมู่ ทำให้แอป Android เกือบทุกแอปสามารถปรับปรุงวิดเจ็ตสำหรับเสียงได้ หากต้องการเริ่มต้นใช้งาน โปรดดูหัวข้อผสานรวมการดำเนินการของแอปกับวิดเจ็ต Android
ช่วยให้การเปลี่ยนผ่านราบรื่นยิ่งขึ้น
ตั้งแต่ Android 12 เป็นต้นไป Launcher จะช่วยให้การเปลี่ยนผ่านราบรื่นขึ้นเมื่อผู้ใช้เปิดแอปจากวิดเจ็ต
หากต้องการเปิดใช้การเปลี่ยนที่ปรับปรุงแล้วนี้ ให้ใช้ @android:id/background หรือ android.R.id.background เพื่อระบุองค์ประกอบพื้นหลัง ดังนี้
<!-- Top-level layout of the widget. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/background" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> </LinearLayout>
แอปของคุณสามารถใช้ @android:id/background ใน Android เวอร์ชันก่อนหน้าได้โดยไม่ขัดข้อง แต่ระบบจะไม่สนใจ
ใช้การแก้ไขรันไทม์ของ RemoteViews
ตั้งแต่ Android 12 เป็นต้นไป คุณสามารถใช้ประโยชน์จากเมธอด RemoteViews หลายรายการที่ช่วยให้แก้ไขแอตทริบิวต์ RemoteViews ขณะรันไทม์ได้ ดูรายการเมธอดที่เพิ่มทั้งหมดได้ที่เอกสารอ้างอิง API ของ RemoteViews
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้เมธอดเหล่านี้บางส่วน
// Set the colors of a progress bar at runtime. remoteView.setColorStateList( R.id.progress, "setProgressTintList", createProgressColorStateList() ) // Specify exact sizes for margins. remoteView.setViewLayoutMargin( R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DIP )