获取可调整大小的appwidget维度(或绕过它)

时间:2012-02-08 12:01:14

标签: android android-layout android-appwidget

我为我的应用创建了一个很好的广度。它只显示从服务器下载的项目列表。嗯,确切地说,它看起来只是一个列表,因为较旧的Android版本(我想支持)不支持RemoteViews中的ListView。

我希望我的小部件显示最新项目列表,我希望这些项目能够占用所有可用的小部件空间。为了更好地展示我的问题,以免假设WLOG我想要一个具有所选节目的电视节目表的小部件。知道:

  • 从服务器下载费用很高
  • WLOG我们可以假设我可以下载的服务器上有Aleph零项目
  • 电视时间表可能会有所变化,所以我们不想下载整整一个月的时间表,但最多只能下载半天
  • 显示的第一项将包含当前正在播放的节目

如果用户调整大小以使其变大,我如何确保小部件底部不会有空白空间?我搜索了SO,似乎当​​用户更改小部件大小时(在ICS或自定义启动器上 - GO Launcher EX允许它),将无法获得小部件的新维度(纠正我,如果我错了)。

但我真的不需要它们!我想知道有多少项适合小部件,并且从小部件的大小计算这只是其中一种方法。

所以,我问你是否可以,例如,如果远程视图可见,是否可以接收通知,或创建自定义视图以便在RemoteViews中使用,这样可以让我估计可见项目的数量。 / p>

如果不可能,我只需要使用一些合理的默认值,但知道我可以显示多少行会很好。

1 个答案:

答案 0 :(得分:4)

自Android 4.1(API级别16)起,您可以使用onAppWidgetOptionsChanged检测大小更改。看一下这个answer的简单例子。至少使用此回调,您可以跟踪窗口小部件的大小范围(可惜您无法跟踪实际窗口小部件大小)。使用以前的版本和自定义启动器你运气不好:AFAIK没有通用的方法来获得实际的小部件大小范围,甚至更少的实际大小。

在您的情况下,我要做的是使用适合默认小部件大小的多个视图填充小部件,如appwidget提供程序中所定义。这样你就可以避免在底部获得空白,当然,除非显示的项目实际上很少。当窗口小部件调整大小时,您可以使用API​​级别16 +的onAppWidgetOptionsChanged显示更多视图,并且API级别< 16 AFAIK您将获得空白空间,但在这种情况下,您可以很快触发小部件更新,以最大限度地减少此问题。