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

use*_*567 9 android android-layout android-appwidget

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

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

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

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

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

所以,我问你是否有可能,例如,如果远程视图变得可见,或者创建自定义视图以便在RemoteViews中使用,这将允许我估计可见项目的数量.

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

Jos*_*_GD 4

从 Android 4.1(API 级别 16)开始,您可以使用onAppWidgetOptionsChanged检测大小变化。看一下这个答案的一个简单例子。通过此回调,至少您可以跟踪小部件的尺寸范围(遗憾的是您无法跟踪实际的小部件尺寸)。对于以前的版本和自定义启动器,您运气不好:据我所知,没有通用的方法来获取实际的小部件尺寸范围,甚至更不用说实际尺寸。

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