现代 Android 小部件开发

Posted

技术标签:

【中文标题】现代 Android 小部件开发【英文标题】:Modern Android Widget Development 【发布时间】:2021-03-09 10:15:51 【问题描述】:

现在是 2020 年,在 ios 终于添加了对 Widget 的支持之后,Widget 再次风靡一时。但是,自 2012 年以来,android 小部件似乎没有更新。

来自Android docs:

RemoteViews 对象(以及相应的 App Widget)可以支持 以下布局类:

框架布局 线性布局 相对布局 网格布局

这意味着,没有 ConstraintLayout,没有 RecyclerView,没有 AndroidX。我不想回到 ListView 的黑暗日子。

Android 开发者网站上的文档真的仍然是当今开发 Android Widget 的最佳实践吗?有没有人有在 AndroidX 世界中制作小部件的经验?是否有任何类型的 3rd 方 API 可以让体验不那么痛苦?

【问题讨论】:

【参考方案1】:

不过,自 2012 年以来,Android 小部件似乎没有更新。

正确。

我不想回到 ListView 的黑暗日子。

嗯……对不起?

Android 开发者网站上的文档真的仍然是当今开发 Android Widget 的最佳实践吗?

应用小部件不是关于“最佳实践”,而是更多关于记录和支持的协议。请记住,应用程序小部件实际上是一种进程间通信 (IPC) 协议,它恰好最终会产生一个 UI。您的应用没有呈现 UI — 主屏幕或其他应用小部件宿主通常在 AppWidgetHost 和相关 API 的帮助下。

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

正确。毕竟,您不知道主屏幕是否可以访问这些内容,或者它们的版本等。

是否有任何类型的 3rd 方 API 可以让体验不那么痛苦?

那是不可能的。您的应用与应用小部件几乎没有关系。 “繁重的工作”在框架中,在较小程度上是在主屏幕中。第三方 API 无法真正改变这一点。

我期待 Google 开始引导启动器开发人员开始支持 slices 作为“应用小部件”的替代形式。这还没有发生,因为谷歌似乎已经忘记了切片。也许,在未来,谷歌会提供基于Android 11's SurfaceControlViewHost 的东西,这为各种可能性打开了大门。在这两种情况下,都可能需要启动器开发人员进行更改以支持这些内容,这会减慢采用速度。

除了小部件和容器的有限列表之外,您可以做的最接近的事情是将您自己的内容呈现到Bitmap 并在应用小部件中的ImageView 中显示。这变得很棘手,因为您不知道应用小部件的精确大小。当然,这不会改变输入选项。

【讨论】:

感谢马克的详细见解!祈求 Google 采纳您的建议来更新/替换此 API。 @Luke:iOS 已经认可应用小部件概念这一事实可能有助于在 Google 的背后“点燃一把火”,并让他们在该领域进行更多投资。如果Jetpack Compose eventually has a role here,我不会感到惊讶。但是,总的来说,我能感受到你的痛苦。 更新:Android 12 据称正在“现代化”小部件 API,但似乎 RemoteView 仍然是一项要求,而且大多数更改似乎更美观(例如复制 iOS)而不是实际缓解小部件的问题。

以上是关于现代 Android 小部件开发的主要内容,如果未能解决你的问题,请参考以下文章

Android 小部件 - 需要 4x2 小部件 获取 1x1 小部件

Android开发中实现桌面小部件

Android桌面小部件AppWidget开发

应用程序在android中可以拥有的小部件数量

Android开发5:应用程序窗口小部件App Widgets的实现

如何在android中单击按钮时更新小部件的视图?