
作者 / 開發者關係工程師 Marcel Pintó Biescas,@marxallskiAndroid 12 改進了一項被許多 Android 用戶視為關鍵的功能 - App Widgets,改進後的 Widgets 更加實用、美觀,且更易於被用戶發現 (84% 的用戶至少使用一個 Widgets)。現在,我們發布了 Jetpack Glance 的第一個 Alpha 版,讓Widgets的構建過程變得更加輕鬆,該版本是建立在 Jetpack Compose 運行時 (Runtime) 之上的新框架,旨在實現更快、更輕鬆的為主屏幕或其他界面構建 App Widgets。
Android 12 Widgets改進https://developer.android.google.cn/about/versions/12/features/widgets
App Widgetshttps://developer.android.google.cn/guide/topics/appwidgets/overview
Jetpack Glancehttps://developer.android.google.cn/jetpack/androidx/releases/glance
Jetpack Compose 運行時 (Runtime)https://developer.android.google.cn/jetpack/androidx/releases/compose-runtime
https://issuetracker.google.com/issues/new?component=1097239&template=1611667Glance 提供了新式聲明性 Kotlin API,其類似於您在 Jetpack Compose 中使用的 API,能夠幫助您用更少的代碼構建更美觀的自適應 App Widgets。https://developer.android.google.cn/jetpack/compose△Glance "Hello World" Widgets示例
class GreetingsWidget(private val name: String): GlanceAppWidget() { @Composable override fun Content() { Text(text = "Hello $name") }}class GreetingsWidgetReceiver : GlanceAppWidgetReceiver() { override val glanceAppWidget = GreetingsWidget("Glance")}Glance 提供了可組合項的基礎組件集,助您打造 "一目了然" 的體驗。現在,我們將提供更多的 App Widgets。Glance 利用 Jetpack Compose 運行時 (Runtime),可以將可組合項轉化為實際的 RemoteViews,並在 App Widgets 中顯示。

可組合項https://developer.android.google.cn/reference/kotlin/androidx/compose/runtime/Composable
RemoteViewshttps://developer.android.google.cn/reference/android/widget/RemoteViews
這意味着 Glance 需要啟用 Compose,且依賴於運行時 (Runtime)、圖形 (Graphics) 和單元界面 Compose 層,但它與其他現有的 Jetpack Compose 界面元素之間不具備直接互操作性。但是,您可以分享應用中的狀態或任何其他邏輯,以此來打造一目了然的界面。
啟用 Composehttps://developer.android.google.cn/jetpack/compose/interop/adding#anchorCompose 層https://developer.android.google.cn/jetpack/compose/layering此初始版本引入了主要的 API,不僅能夠實現與現有 RemoteViews 之間的互操作性,還能幫助您構建 App Widgets。
以下是該開發庫提供的內容概覽:
通過 GlanceAppWidget 和 GlanceAppWidgetReceiver 聲明您的 App Widgets。
GlanceAppWidgethttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/GlanceAppWidgetGlanceAppWidgetReceiverhttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/GlanceAppWidgetReceiver
利用 Glance 可組合項的初始集組合您的界面: Box、Row、Column、Text、Button、LazyColumn、Image、Spacer。Box、Row、Column、Spacerhttps://developer.android.google.cn/reference/kotlin/androidx/glance/layout/package-summary#top-level-functionsTexthttps://developer.android.google.cn/reference/kotlin/androidx/glance/text/package-summary#textButtonhttps://developer.android.google.cn/reference/kotlin/androidx/glance/package-summary#buttonLazyColumnhttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/lazy/package-summary#lazycolumnImagehttps://developer.android.google.cn/reference/kotlin/androidx/glance/package-summary#image利用 GlanceModifier 方法將修飾符應用於可組合項:https://developer.android.google.cn/reference/kotlin/androidx/glance/GlanceModifier.html
利用預定義的 Action 處理用戶交互:
https://developer.android.google.cn/reference/kotlin/androidx/glance/action/package-summary
https://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/action/package-summary#actionstartactivity
https://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/action/package-summary#actionruncallbackhttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/action/package-summary#actionstartserviceactionStartBroadcastReceiverhttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/action/package-summary#actionstartbroadcastreceiver
通過 ActionParameters 為 Action 提供參數:
https://developer.android.google.cn/reference/kotlin/androidx/glance/action/ActionParameters通過定義 SizeMode.Single、SizeMode.Exact 或 SizeMode.Responsive 來處理不同的 Widgets 布局。SizeMode.Singlehttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/SizeMode.SingleSizeMode.Exacthttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/SizeMode.ExactSizeMode.Responsivehttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/SizeMode.Responsive不同的 Widgets 布局https://developer.android.google.cn/guide/topics/appwidgets/layouts提供 GlanceStateDefinition,以保留 GlanceAppWidget 狀態。
GlanceStateDefinitionhttps://developer.android.google.cn/reference/kotlin/androidx/glance/state/GlanceStateDefinition.html
GlanceAppWidgethttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/state/package-summary
提供本地組合,例如 LocalContext、LocalState、LocalGlanceId、LocalSize:https://developer.android.google.cn/reference/kotlin/androidx/glance/package-summary#top-level-properties通過 AndroidRemoteViews 可組合項實現與您現有 RemoteViews 之間的互操作。
AndroidRemoteViewshttps://developer.android.google.cn/reference/kotlin/androidx/glance/appwidget/package-summary#androidremoteviewsRemoteViewshttps://developer.android.google.cn/reference/android/widget/RemoteViews.html我們還將推出更多功能,例如默認主題,更完善的 Android Studio 支持等等。敬請期待新版本:
https://developer.android.google.cn/jetpack/androidx/releases/glance
注意:雖然 SDK 的最低版本是 21,但 Alpha 版目前支持兼容的最低版本為 SDK v23。
△在 Android 12 中構建新式 Android App Widgets
您可以在 GitHub 上查看示例,以便快速入門。也可以在最新的穩定版 Android Studio 中使用 Glance,但首先需要按照 Jetpack Compose 文檔中的步驟進行設置,因為 Glance 依賴於 Compose 運行時 (Runtime)。示例https://github.com/android/user-interface-samples/tree/glance/AppWidget/glance-widget
穩定版 Android Studiohttps://developer.android.google.cn/studio
Jetpack Compose 文檔https://developer.android.google.cn/jetpack/compose/interop/adding#setup
此外,您還可以查看 AndroidX 代碼庫中的進階示例:https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/
編寫您自己的插件,您可以擴展 Android Gradle Plugin 並根據您的項目需求自定義您的構建!△ResponsiveAppWidget.kt 演示ResponsiveAppWidget.kthttps://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:glance/glance-appwidget/integration-tests/demos/src/main/java/androidx/glance/appwidget/demos/ResponsiveAppWidget.ktAlpha 版本是您參與開發 API 的重要機會,因此,歡迎分享您的反饋,幫助我們了解並進一步提升您的體驗!也歡迎您持續關注 "Android 開發者" 微信公眾號了解更多最新內容。分享您的反饋https://issuetracker.google.com/issues/new?component=1097239&template=1611667
您也可以通過下方二維碼向我們提交反饋,或分享您喜歡的內容、發現的問題。您的反饋對我們非常重要,感謝您的支持!

點擊屏末|閱讀原文|即刻了解App Widgets 更多內容