现代Android小部件开发

4
2020年,iOS终于支持了小部件(Widgets),它再次成为热门话题。然而,Android的小部件似乎自2012年以来就没有更新过。
Android文档中可以了解到:
“RemoteViews对象(因此也是应用小部件)可以支持以下布局类别:
- FrameLayout - LinearLayout - RelativeLayout - GridLayout
这意味着没有ConstraintLayout、RecyclerView和AndroidX。我不想回到ListView的黑暗时代。
现在,在AndroidX世界中制作小部件的最佳实践是什么?有没有任何第三方API可以减少痛苦体验? Android开发者网站上的文档是否仍然是制作Android小部件的最佳实践?
1个回答

5

然而,自2012年以来,Android小部件似乎没有得到更新。

正确。

我不想回到ListView的黑暗时代。

嗯...抱歉?

Android开发者网站上的文档是否仍然是今天开发Android小部件的最佳实践?

应用程序小部件更多地涉及文档化和支持的协议,而不是“最佳实践”。请记住,应用程序小部件实际上是一种进程间通信(IPC)协议,最终只会产生UI。您的应用程序并未呈现UI - 主屏幕或其他应用程序小部件宿主通常会在AppWidgetHost和相关API的帮助下进行呈现。

这意味着没有ConstraintLayout、RecyclerView、AndroidX。

正确。毕竟,您不知道主屏幕是否可以访问其中任何内容,或者它们的版本是什么等等。

有没有第三方API可以使体验不那么痛苦?

这并不是真正可能的。你的应用程序与应用小部件几乎没有关系。 "重活" 在框架中,而在较小程度上,在主屏幕上。第三方 API 无法真正改变这一点。
我原本期望 Google 开始引导启动器开发人员支持 slices 作为“应用小部件”的替代形式。然而,由于 Google 似乎已经忘记了 slices,因此尚未发生。也许在将来,Google 将基于 Android 11 的 SurfaceControlViewHost 提供某些东西,这将为各种可能性打开大门。在这两种情况下,可能需要启动器开发人员进行更改以支持这些内容,这将减缓采用速度。
你可以做的最接近提供超出有限的小部件和容器列表中的 UI 的事情是将自己的东西呈现到 Bitmap 中,并在应用小部件中的 ImageView 中显示它。这变得棘手,因为您不知道应用小部件的精确大小。当然,这也不会改变输入选项。

1
谢谢你详细的见解,马克!希望Google采纳你的建议来更新/替换这个API。 - Luke Needham
2
@Luke:iOS已经认可了应用程序小部件的概念,这可能会在谷歌的后座下“点燃火苗”,促使他们在这个领域投入更多。如果Jetpack Compose最终在这里扮演一定角色,我也不会感到惊讶。但总的来说,我理解你的痛苦。 - CommonsWare
更新:Android 12据说正在“现代化”小部件API,但似乎RemoteView仍然是必需的,并且大多数更改似乎更多地是美学上的[例如复制iOS],而不是真正缓解小部件的问题。 - ntorstio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接