ปรับปรุงวิดเจ็ต

หน้านี้มีรายละเอียดสำหรับการเพิ่มประสิทธิภาพวิดเจ็ตที่มีให้ใช้งาน (ไม่บังคับ) เริ่มตั้งแต่ Android 12 (API ระดับ 31) ฟีเจอร์เหล่านี้เป็นตัวเลือกที่ไม่บังคับ แต่ นำไปใช้และปรับปรุงผู้ใช้ วิดเจ็ต

ใช้สีแบบไดนามิก

ตั้งแต่ Android 12 เป็นต้นไป วิดเจ็ตจะใช้สีธีมของอุปกรณ์ได้ สำหรับปุ่ม พื้นหลัง และองค์ประกอบอื่นๆ วิธีนี้จะทำให้ราบรื่น การเปลี่ยนแปลงและความสม่ำเสมอของวิดเจ็ตต่างๆ

การสร้างสีแบบไดนามิกทำได้ 2 วิธีดังนี้

เมื่อตั้งค่าธีมในเลย์เอาต์รากแล้ว คุณสามารถใช้แอตทริบิวต์สีทั่วไปใน รากหรือองค์ประกอบย่อยใดๆ เพื่อเลือกสีไดนามิก

ตัวอย่างของแอตทริบิวต์สีที่คุณสามารถใช้ได้มีดังต่อไปนี้

  • ?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>
วิดเจ็ตในธีมโหมดสว่าง
รูปที่ 1 วิดเจ็ตในธีมสว่าง
วิดเจ็ตในธีมโหมดมืด
รูปที่ 2 วิดเจ็ตในธีมมืด

ความเข้ากันได้แบบย้อนหลังสำหรับสีแบบไดนามิก

สีไดนามิกใช้ได้เฉพาะในอุปกรณ์ที่ใช้ 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>
รูปภาพแสดงตัวอย่างวิดเจ็ต
รูปที่ 3 ตัวอย่างวิดเจ็ตตามค่าเริ่มต้น ปรากฏในพื้นที่ขนาด 3x3 แต่สามารถพอดีกับพื้นที่ขนาด 3x1 ได้เนื่องจากมีการจัดวาง XML

หากต้องการแสดงตัวอย่างที่แม่นยำ คุณสามารถระบุวิดเจ็ตจริงได้โดยตรง ด้วยค่าเริ่มต้นโดยทำตามขั้นตอนต่อไปนี้

  • กำลังตั้งค่า 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 เป็นต้นไป ให้ระบุคำอธิบายสำหรับวิดเจ็ต เครื่องมือเลือกเพื่อแสดงสำหรับวิดเจ็ตของคุณ

วันที่ รูปภาพแสดงเครื่องมือเลือกวิดเจ็ตที่แสดงวิดเจ็ตและคำอธิบาย
รูปที่ 4 ตัวอย่างเครื่องมือเลือกวิดเจ็ตที่แสดงวิดเจ็ต และคำอธิบาย

ระบุคำอธิบายสำหรับวิดเจ็ตโดยใช้แอตทริบิวต์ description ของ องค์ประกอบ &lt;appwidget-provider&gt;:

<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);