หน้านี้มีรายละเอียดสำหรับการเพิ่มประสิทธิภาพวิดเจ็ตที่มีให้ใช้งาน (ไม่บังคับ) เริ่มตั้งแต่ Android 12 (API ระดับ 31) ฟีเจอร์เหล่านี้เป็นตัวเลือกที่ไม่บังคับ แต่ นำไปใช้และปรับปรุงผู้ใช้ วิดเจ็ต
ใช้สีแบบไดนามิก
ตั้งแต่ Android 12 เป็นต้นไป วิดเจ็ตจะใช้สีธีมของอุปกรณ์ได้ สำหรับปุ่ม พื้นหลัง และองค์ประกอบอื่นๆ วิธีนี้จะทำให้ราบรื่น การเปลี่ยนแปลงและความสม่ำเสมอของวิดเจ็ตต่างๆ
การสร้างสีแบบไดนามิกทำได้ 2 วิธีดังนี้
ใช้ธีมเริ่มต้นของระบบ (
@android:style/Theme.DeviceDefault.DayNight
) ในเลย์เอาต์รูทใช้ธีม Material 3 (
Theme.Material3.DynamicColors.DayNight
) จาก ส่วนประกอบเนื้อหาสำหรับ แอนดรอยด์ ไลบรารี โดยเริ่มจากคอมโพเนนต์เนื้อหาสำหรับ 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
...
app:tint="?attr/colorPrimaryContainer"
android:src="@drawable/ic_partly_cloudy" />
<!-- Other widget content. -->
</LinearLayout>
![วิดเจ็ตในธีมโหมดสว่าง](https://developer.android.com/static/images/appwidgets/example-lightmode.png?authuser=9&hl=th)
![วิดเจ็ตในธีมโหมดมืด](https://developer.android.com/static/images/appwidgets/example-darkmode.png?authuser=9&hl=th)
ความเข้ากันได้แบบย้อนหลังสำหรับสีแบบไดนามิก
สีไดนามิกใช้ได้เฉพาะในอุปกรณ์ที่ใช้ 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
<resources>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
...
android:background="?android:attr/colorBackground"
android:theme="@style/MyWidgetTheme" />
</resources>
เปิดใช้การสนับสนุนเสียง
การดำเนินการของแอปช่วยให้ Google Assistant ทำได้ แสดงวิดเจ็ตตามคำสั่งเสียงของผู้ใช้ที่เกี่ยวข้อง โดยการกำหนดค่า เพื่อตอบสนองต่อ Intent ในตัว (BII) แอปสามารถแสดงวิดเจ็ตในเชิงรุกบนแพลตฟอร์มของ Assistant เช่น Android และ Android Auto ผู้ใช้มีตัวเลือกในการปักหมุด วิดเจ็ตที่แสดงโดย Assistant Launcher เพื่อส่งเสริมการมีส่วนร่วมในอนาคต
เช่น คุณสามารถกำหนดค่าวิดเจ็ตสรุปการออกกำลังกายสำหรับแอปออกกำลังกายได้
เพื่อตอบสนองคำสั่งเสียงของผู้ใช้
ที่ทริกเกอร์
GET_EXERCISE_OBSERVATION
BII. Assistant จะแสดงวิดเจ็ตในเชิงรุกเมื่อผู้ใช้เรียกใช้ BII นี้ด้วย
การส่งคำขออย่างเช่น "Ok Google สัปดาห์นี้ฉันวิ่งไปกี่กิโลเมตร
แอปตัวอย่าง"
มี BII หลายสิบรายการที่ครอบคลุมการโต้ตอบของผู้ใช้ในหลายหมวดหมู่ ช่วยให้แอป Android เกือบทุกแอปสามารถเพิ่มประสิทธิภาพวิดเจ็ตสำหรับเสียง วิธีเริ่มต้น ดูผสานรวมการดำเนินการของแอปกับวิดเจ็ต Android
ปรับปรุงประสบการณ์เครื่องมือเลือกวิดเจ็ตของแอป
Android 12 ช่วยให้คุณสามารถปรับปรุงประสบการณ์เครื่องมือเลือกวิดเจ็ตสำหรับ โดยเพิ่มตัวอย่างวิดเจ็ตแบบไดนามิกและคำอธิบายวิดเจ็ต
เพิ่มตัวอย่างวิดเจ็ตที่รองรับการปรับขนาดลงในเครื่องมือเลือกวิดเจ็ต
ตั้งแต่ Android 12 เป็นต้นไป ตัวอย่างวิดเจ็ตที่แสดงใน เครื่องมือเลือกวิดเจ็ตรองรับการปรับขนาด คุณสามารถระบุเป็นเค้าโครง XML ที่ตั้งค่าให้กับ ขนาดเริ่มต้น ก่อนหน้านี้ การแสดงตัวอย่างวิดเจ็ตเป็นทรัพยากรที่ถอนออกได้แบบคงที่ ในบางกรณีซึ่งนำไปสู่ตัวอย่างที่แสดงลักษณะที่วิดเจ็ตปรากฏอย่างไม่ถูกต้องเมื่อ เพื่อเพิ่มลงในหน้าจอหลัก
หากต้องการใช้การแสดงตัวอย่างวิดเจ็ตที่ปรับขนาดได้ ให้ใช้
previewLayout
ขององค์ประกอบ appwidget-provider
เพื่อระบุการออกแบบ XML แทน:
<appwidget-provider
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
เราขอแนะนำให้ใช้เลย์เอาต์เดียวกันกับวิดเจ็ตจริง โดยมีค่าเริ่มต้นเป็นสมจริง
หรือทดสอบค่าต่างๆ แอปส่วนใหญ่ใช้ previewLayout
และ initialLayout
เดียวกัน สำหรับ
ในการสร้างเค้าโครงตัวอย่างที่ถูกต้อง โปรดดูส่วนต่อไปนี้ใน
เราขอแนะนำให้ระบุทั้งแอตทริบิวต์ previewLayout
และ previewImage
เพื่อให้แอปกลับไปใช้ previewImage
ได้ในกรณีที่อุปกรณ์ของผู้ใช้
ไม่รองรับ previewLayout
แอตทริบิวต์ previewLayout
จะมีความสำคัญเหนือกว่า
เหนือแอตทริบิวต์ previewImage
วิธีที่แนะนำในการสร้างตัวอย่างที่แม่นยำ
หากต้องการใช้การแสดงตัวอย่างวิดเจ็ตที่ปรับขนาดได้ ให้ใช้แอตทริบิวต์ previewLayout
ของ
องค์ประกอบ appwidget-provider
เพื่อระบุเลย์เอาต์ XML:
<appwidget-provider
...
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
![รูปภาพแสดงตัวอย่างวิดเจ็ต](https://developer.android.com/static/images/appwidgets/todo-list-groceries.png?authuser=9&hl=th)
หากต้องการแสดงตัวอย่างที่แม่นยำ คุณสามารถระบุวิดเจ็ตจริงได้โดยตรง ด้วยค่าเริ่มต้นโดยทำตามขั้นตอนต่อไปนี้
กำลังตั้งค่า
android:text="@string/my_widget_item_fake_1"
สำหรับTextView
จากองค์ประกอบเหล่านี้การตั้งค่ารูปภาพหรือไอคอนเริ่มต้นหรือตัวยึดตำแหน่ง เช่น
android:src="@drawable/my_widget_icon"
สำหรับImageView
คอมโพเนนต์
หากไม่มีค่าเริ่มต้น ตัวอย่างอาจแสดงค่าที่ไม่ถูกต้องหรือว่างเปล่า CANNOT TRANSLATE ประโยชน์ที่สำคัญของวิธีการนี้คือคุณสามารถแสดงตัวอย่าง ที่แปลเป็นภาษาท้องถิ่น เนื้อหา
สำหรับวิธีที่แนะนำสำหรับตัวอย่างที่ซับซ้อนขึ้นซึ่งมี ListView
GridView
หรือ StackView
โปรดดูสร้างตัวอย่างที่ถูกต้องซึ่งรวมไดนามิก
รายการเพื่อดูรายละเอียด
ความเข้ากันได้แบบย้อนหลังกับตัวอย่างวิดเจ็ตที่รองรับการปรับขนาด
หากต้องการให้เครื่องมือเลือกวิดเจ็ตใน Android 11 (API ระดับ 30) หรือต่ำกว่าแสดงตัวอย่าง
วิดเจ็ต ให้ระบุ previewImage
หากคุณเปลี่ยนรูปลักษณ์ของวิดเจ็ต ให้อัปเดตรูปภาพตัวอย่าง
เพิ่มรายละเอียดสำหรับวิดเจ็ต
ตั้งแต่ Android 12 เป็นต้นไป ให้ระบุคำอธิบายสำหรับวิดเจ็ต เครื่องมือเลือกเพื่อแสดงสำหรับวิดเจ็ตของคุณ
![รูปภาพแสดงเครื่องมือเลือกวิดเจ็ตที่แสดงวิดเจ็ตและคำอธิบาย](https://developer.android.com/static/images/appwidgets/description.png?authuser=9&hl=th)
ระบุคำอธิบายสำหรับวิดเจ็ตโดยใช้แอตทริบิวต์ description
ของ
องค์ประกอบ <appwidget-provider>
:
<appwidget-provider
android:description="@string/my_widget_description">
</appwidget-provider>
คุณสามารถใช้
descriptionRes
ใน Android เวอร์ชันก่อนหน้า แต่วิดเจ็ตจะไม่สนใจ
เครื่องมือเลือก
ช่วยให้การเปลี่ยนเป็นไปอย่างราบรื่นยิ่งขึ้น
ตั้งแต่ Android 12 เป็นต้นไป Launcher ต่างๆ จะให้การเปลี่ยนที่ราบรื่นยิ่งขึ้น เมื่อผู้ใช้เปิดแอปของคุณจากวิดเจ็ต
ถ้าต้องการเปิดใช้การเปลี่ยนที่ปรับปรุงใหม่นี้ ให้ใช้ @android:id/background
หรือ
android.R.id.background
เพื่อระบุองค์ประกอบพื้นหลัง
// Top-level layout of the widget.
<LinearLayout
android:id="@android:id/background">
</LinearLayout>
แอปของคุณใช้ @android:id/background
ใน Android เวอร์ชันก่อนหน้าได้
โดยไม่ทำให้เสร็จ แต่จะถูกมองข้าม
ใช้การแก้ไขรันไทม์ของ RemoteViews
ตั้งแต่ Android 12 เป็นต้นไป คุณจะใช้ประโยชน์จาก
RemoteViews
เมธอดที่ให้การแก้ไขรันไทม์ของ RemoteViews
ดู RemoteViews
API
เพื่อดูรายการวิธีการที่เพิ่มเข้ามาทั้งหมด
ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้ 2-3 วิธีเหล่านี้
Kotlin
// 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_DP)
Java
// 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_DP);