本文是 "更新 Android 12 中 widget" 系列的第二篇文章。在上一部分我们探讨了通过一些简单的方法,为 APP 用户呈现出非常显性的视觉更新。在这篇文章中,我们将一起了解一些更高级别的特性,这些功能会让您的 widget 更具交互性,更容易配置,并能在 Android 12 上呈现更好的 UI 体验。
更简单的配置
在 Android 12 之前,重新设置 widget 意味着用户必须删除现有 widget,然后使用新配置重新添加。Android 12 在多个方面改进了 widget 的配置方式,从而帮助用户采用更简单的方式对 widget 进行个性化配置。
用户可重新设置原有 widget
可重组的 widget 允许用户对 widget 进行自定义设置。在 Android 12 中,用户将无需通过删除和重新添加 widget 来调整这些原有设定。
要使用这一功能,您需在 appwidget-provider 中把 widgetFeatures 属性设置为 reconfigurable。
xml/app_widget_info_checkbox_list.xml
<appwidget-provider
android:configure="com.example.android.appwidget.ListWidgetConfigureActivity"
android:widgetFeatures="reconfigurable"
... />
xml/app_widget_info_checkbox_list.xml
https://github.com/android/user-interface-samples/blob/main/AppWidget/app/src/main/res/xml/app_widget_info_checkbox_list.xml
默认配置
如果您的 widget 依赖默认设置,在 Android 12 中您可跳过初始化操作,通过默认配置来设置 widget。
让我们一起看下示例 widget 如何工作吧。在这个用例中,我们希望用户能够在两种不同的 widget 布局之间进行选择,即 Grocery List 和 To-Do List。我们会设定 Grocery List 为默认设置,这样用户就不需要执行配置步骤,除非他们想切换至 To-Do List。
要实现此用例,您可以存储用户选项,并在没有做出选择操作的前提下,将 Grocery List 作为返回默认值。
ListAppWidget.kt
val layoutId = ListSharedPrefsUtil.loadWidgetLayoutIdPref(
context, appWidgetId
)
val remoteViews = if (layoutId == R.layout.widget_grocery_list) {
// 以 dp 为单位,指定最大宽度和高度,
// 并指定一个用