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

ลองใช้วิธีแบบ Compose
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีสร้างวิดเจ็ตโดยใช้ API รูปแบบ Compose

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

ดูวิธีอื่นๆ ในการปรับปรุงวิดเจ็ตได้ในคู่มือ Compose หัวข้อปรับปรุงวิดเจ็ต

ใช้สีแบบเปลี่ยนอัตโนมัติ

ตั้งแต่ 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
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:tint="?attr/colorPrimaryContainer"
        android:src="@drawable/ic_cloud" />

    <!-- 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

<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" />

เปิดใช้การรองรับเสียง

การดำเนินการของแอปช่วยให้ Google Assistant แสดงวิดเจ็ตเพื่อตอบสนองต่อคำสั่งเสียงที่เกี่ยวข้องของผู้ใช้ การกำหนดค่า วิดเจ็ตให้ตอบสนองต่อIntent ในตัว (BII) จะช่วยให้ แอปแสดงวิดเจ็ตบนแพลตฟอร์มของ Assistant เช่น Android และ Android Auto ได้อย่างรวดเร็ว ผู้ใช้มีตัวเลือกในการปักหมุดวิดเจ็ตที่ Assistant แสดงไว้ใน Launcher เพื่อกระตุ้นการมีส่วนร่วมในอนาคต

เช่น คุณสามารถกำหนดค่าวิดเจ็ตข้อมูลสรุปการออกกำลังกายสำหรับแอปออกกำลังกาย เพื่อตอบสนองคำสั่งเสียงของผู้ใช้ที่เรียกใช้ GET_EXERCISE_OBSERVATION BII Assistant จะแสดงวิดเจ็ตของคุณอย่างรวดเร็วเมื่อผู้ใช้เรียกใช้ BII นี้โดย การส่งคำขอ เช่น "Ok Google สัปดาห์นี้ฉันวิ่งไปกี่กิโลเมตรใน ExampleApp"

BII มีอยู่หลายสิบรายการซึ่งครอบคลุมการโต้ตอบของผู้ใช้หลายหมวดหมู่ ทำให้แอป Android เกือบทุกแอปสามารถปรับปรุงวิดเจ็ตสำหรับเสียงได้ หากต้องการเริ่มต้นใช้งาน โปรดดูผสานรวมการดำเนินการของแอปกับวิดเจ็ต Android

ช่วยให้การเปลี่ยนราบรื่นยิ่งขึ้น

ตั้งแต่ Android 12 เป็นต้นไป ตัวเรียกใช้จะช่วยให้การเปลี่ยนผ่านเป็นไปอย่างราบรื่นยิ่งขึ้น เมื่อผู้ใช้เปิดแอปจากวิดเจ็ต

หากต้องการเปิดใช้การเปลี่ยนฉากที่ได้รับการปรับปรุงนี้ ให้ใช้ @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 ในรันไทม์ได้ ดูรายการเมธอดทั้งหมดที่เพิ่มได้ที่ข้อมูลอ้างอิงของ RemoteViews API

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้เมธอดเหล่านี้บางส่วน

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