Jetpack Compose 可以用来构建 App Widgets 吗?

Posted

技术标签:

【中文标题】Jetpack Compose 可以用来构建 App Widgets 吗?【英文标题】:Can Jetpack Compose be used to build App Widgets? 【发布时间】:2020-12-17 11:24:14 【问题描述】:

使用 swift,可以使用 SwiftUI 编写小部件,但我还没有看到任何关于 Jetpack Compose 是否可用于构建 android App Widgets 的声明。

现在 Compose 处于 Alpha 阶段,是否有任何信息可以让我了解如何做到这一点?

【问题讨论】:

一个很重要的问题我也琢磨了很久,甚至还想在这里问。支持它并寻找好的答案。顺便说一句,Android Widgets 是指天气/日历/音乐/时钟小部件吗? @SaadAAkash 是的,我的意思是进入主屏幕的应用小部件。它们可能是您刚才提到的任何一种。 【参考方案1】:

这在很大程度上取决于您所说的“Jetpack Compose”是什么意思。我们昨天还在Kotlinlang Slack 上讨论过这个问题。

如果您的意思是 Compose UI 和相关包——我们可以用来构建由活动显示的 UI 的可组合库——那么不,这对应用小部件几乎没有作用。原则上,您可以将可组合对象渲染为 Bitmap,然后在应用小部件中将其与 ImageView 一起使用,仅此而已。

如果您指的是 Compose Runtime——@Composable、重组、remember() 等背后的底层“管道”——那么将来可能会提供一些东西。基本上,据我了解,可能还有另一组可组合物与构建和发布 RemoteViews 视图层次结构相关。从好的方面来说,这会给你的AppWidgetProvider 一种 Compose 的“感觉”。但是,它不会导致像 TextField 这样的东西在应用小部件中神奇地开始工作。

【讨论】:

【参考方案2】:

2021 年 11 月 8 日更新:新的 Jetpack 库 GlanceAppWidget 在此 video 中提到。在撰写本文时无法找到有关 Glance 的更多信息。

在 Google 上看到这篇文章。期待更多公告!

链接:https://developer.android.com/jetpack/androidx/compose-roadmap

【讨论】:

这里的人已经在体验快照库了:youtube.com/watch?v=lN3m164VV9s&t=2131s【参考方案3】:

事实证明这是不可能的,但它正在开发中。

根据Android Developers YouTube 频道的this video at 12:16 往后,这是目前正在探索的一个想法,将于今年晚些时候(2021 年)发布。

它的外观示例如下(直接取自同一视频):

【讨论】:

这与我的回答完全一致(我认为你不赞成)。他们将提供一个可组合库,帮助您操作RemoteViews。它们可能包含一定程度的向后兼容性(例如,在 Android 12+ 上使用 RemoteViews 中的原生 CheckBox 支持,并在旧设备上使用 ImageView 伪造它)。但它们仍将受到RemoteViews 的限制,因为这是用于应用程序发布应用程序小部件的底层 IPC 协议。 Compose 无法改变这一点。 我想提供一些链接,以便其他开发人员也可以轻松地浏览视频并查看他们要说的内容。我绝对没有否决您的答案,我赞成并将其标记为已接受的答案,因为我相信您实际上回答得很好。抱歉,如果我让它看起来那样,我怎么能在不做我刚才做的事情的情况下向其他好奇的开发人员提供这些信息(主要是链接和示例代码)? 我诚挚的歉意。当您发布此答案时,有一个非常接近的时间,我猜错了反对票的来源。有另一个答案是完全可以的。如果不是屏幕截图,您也可以将链接发布为评论,但屏幕截图肯定会增加价值。再次,我为我的错误道歉。 太棒了,我很高兴没有误会!感谢您帮助我解决我的问题。【参考方案4】:

您可以使用 AndroidX 的 Glance,它现在是 Alpha 版本:

https://developer.android.com/jetpack/androidx/releases/glance

您可以在此处找到示例代码项目:

https://github.com/android/user-interface-samples/tree/glance/AppWidget/glance-widget

【讨论】:

将其标记为已接受的答案,因为现在它是解决当前状态问题的方法。我希望这可以帮助搜索此内容的新人找到正确的文档!

以上是关于Jetpack Compose 可以用来构建 App Widgets 吗?的主要内容,如果未能解决你的问题,请参考以下文章

深入详解 Jetpack Compose | 优化 UI 构建

将 jetpack compose 添加到现有项目

Android Jetpack Compose学习—— Jetpack compose入门

Android Jetpack Compose学习—— Jetpack compose入门

Jetpack All In Compose ?看各种Jetpack库在Compose中的使用

jetpack compose 接收返回参数