首页 > 解决方案 > 现代 Android 小部件开发

问题描述

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

来自Android 文档

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

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

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

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

标签: androidwidgetandroid-widget

解决方案


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

正确的。

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

嗯……对不起?

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

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

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

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

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

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

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

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


推荐阅读