Trang này trình bày thông tin chi tiết về các tính năng nâng cao tiện ích không bắt buộc, có sẵn kể từ Android 12 (cấp độ API 31). Các tính năng này là không bắt buộc, nhưng dễ triển khai và giúp cải thiện trải nghiệm của người dùng đối với tiện ích.
Sử dụng màu động
Kể từ Android 12, một tiện ích có thể sử dụng màu giao diện của thiết bị cho các nút, nền và các thành phần khác. Điều này giúp chuyển đổi mượt mà hơn và đảm bảo tính nhất quán trên nhiều tiện ích.
Có 2 cách để sử dụng màu động:
Sử dụng giao diện mặc định của hệ thống (
@android:style/Theme.DeviceDefault.DayNight) trong bố cục gốc.Sử dụng giao diện Material 3 (
Theme.Material3.DynamicColors.DayNight) từ thư viện Thành phần Material cho Android, có sẵn kể từ Thành phần Material cho Android phiên bản 1.6.0.
Sau khi đặt giao diện trong bố cục gốc, bạn có thể sử dụng các thuộc tính màu phổ biến trong gốc hoặc bất kỳ thành phần con nào của gốc để chọn màu động.
Dưới đây là một số ví dụ về thuộc tính màu mà bạn có thể sử dụng:
?attr/primary?attr/primaryContainer?attr/onPrimary?attr/onPrimaryContainer
Trong ví dụ sau đây sử dụng giao diện Material 3, màu giao diện của thiết bị là "hơi tím". Màu nhấn và nền tiện ích thích ứng với chế độ sáng và tối, như minh hoạ trong hình 1 và 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>
Khả năng tương thích ngược cho màu động
Màu động chỉ có trên các thiết bị chạy Android 12 trở lên. Để cung cấp giao diện tuỳ chỉnh cho các phiên bản thấp hơn, hãy tạo giao diện mặc định bằng màu sắc tuỳ chỉnh và một bộ hạn định mới (values-v31) bằng các thuộc tính giao diện mặc định.
Sau đây là một ví dụ khi dùng giao diện 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>
Bật tính năng hỗ trợ giọng nói
Hành động trong ứng dụng cho phép Trợ lý Google hiển thị các tiện ích để phản hồi các lệnh thoại có liên quan của người dùng. Bằng cách định cấu hình tiện ích của bạn để phản hồi ý định tích hợp (BII), ứng dụng của bạn có thể chủ động hiển thị các tiện ích trên các nền tảng của Trợ lý như Android và Android Auto. Người dùng có thể chọn ghim các tiện ích do Trợ lý hiển thị vào trình chạy của họ, khuyến khích họ tương tác trong tương lai.
Ví dụ: bạn có thể định cấu hình tiện ích tóm tắt bài tập cho ứng dụng thể dục
để thực hiện các lệnh thoại của người dùng kích hoạt
GET_EXERCISE_OBSERVATION
BII. Trợ lý chủ động hiển thị tiện ích của bạn khi người dùng kích hoạt BII này bằng cách đưa ra các yêu cầu như "Ok Google, tuần này tôi đã chạy được bao nhiêu dặm trên ExampleApp?"
Có hàng chục BII bao gồm nhiều danh mục lượt tương tác của người dùng, cho phép hầu hết mọi ứng dụng Android nâng cao tiện ích cho giọng nói. Để bắt đầu, hãy xem Tích hợp Hành động trong ứng dụng với các tiện ích Android.
Thêm tên vào tiện ích
Tiện ích cần có tên riêng khi được hiển thị trong trình chọn tiện ích.
Tên của tiện ích được tải từ thuộc tính label của phần tử receiver của tiện ích trong tệp AndroidManifest.xml.
<receiver
….
android:label="Memories">
….
</receiver>
Thêm nội dung mô tả cho tiện ích
Kể từ Android 12, hãy cung cấp nội dung mô tả để trình chọn tiện ích hiển thị cho tiện ích của bạn.
Cung cấp nội dung mô tả cho tiện ích bằng thuộc tính description của phần tử
<appwidget-provider>:
<appwidget-provider
android:description="@string/my_widget_description">
</appwidget-provider>
Bạn có thể sử dụng thuộc tính
descriptionRes
trên các phiên bản Android trước đó, nhưng trình chọn tiện ích
sẽ bỏ qua thuộc tính này.
Bật tính năng chuyển đổi mượt mà hơn
Kể từ Android 12, trình chạy cung cấp quá trình chuyển đổi mượt mà hơn khi người dùng khởi chạy ứng dụng của bạn từ một tiện ích.
Để bật tính năng chuyển đổi được cải thiện này, hãy sử dụng @android:id/background hoặc android.R.id.background để xác định phần tử nền:
// Top-level layout of the widget.
<LinearLayout
android:id="@android:id/background">
</LinearLayout>
Ứng dụng của bạn có thể sử dụng @android:id/background trên các phiên bản Android trước đó mà không bị lỗi, nhưng thuộc tính này sẽ bị bỏ qua.
Sử dụng tính năng sửa đổi thời gian chạy của RemoteViews
Kể từ Android 12, bạn có thể tận dụng một số phương thức RemoteViews cung cấp tính năng sửa đổi thời gian chạy của các thuộc tính RemoteViews. Hãy xem tài liệu tham khảo API RemoteViews
để biết danh sách đầy đủ các phương thức đã thêm.
Ví dụ về mã sau đây cho biết cách sử dụng một số phương thức này.
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);