确定主屏幕的appwidgets空间网格大小

时间:2013-01-09 19:32:53

标签: android android-appwidget

我为平板电脑开发了一个可调整大小的app-widget。 app-widget在大多数设备和大多数发射器上运行良好,但是在纵向模式下GO-HD Launcher的方向存在一些问题。 app-widget的高度太大,看起来不太好。

为了解决这个问题,我创建了一个允许用户设置任何额外边距的方法,在app-widget空间中,他希望让它看起来不错。例如,当设备处于纵向模式时,他可以设置额外的20像素上边距,而当处于横向模式时,他可以设置仅5像素。

现在我正在创建一个允许用户设置边距的活动。我想制作一个小的预览区域(它将是一个具有相同背景可绘制app-widget的线性布局),以便用户了解app-widget在主屏幕上的外观如何具有这些边距。实际上我已经做到了,但结果远离现实。

所以我的问题是:

有没有办法获得启动器应用程序用于将应用程序小部件放在主屏幕上的网格单元的大小(或接近它)?请注意,我知道并非所有发射器都遵循Android公式,但我想要的是获得一种计算近似值的方法。

----编辑----

为了更好地理解我的问题,我创建了一个截图:

shot

首先,app-widget的背景是一个没有图形或尺寸的形状xml文件。 Android可以在可用空间中绘制它。在我看来,这是最好的GUI设计(至少在后台)。现在,在屏幕1中,您可以在默认的Android启动器中以纵向模式查看窗口小部件,它看起来非常好,并且正在重新调整大小。在屏幕2和3中,您可以在GO-HD启动器(横向和纵向模式)中看到它,在此启动器中,它在横向模式下看起来非常小,在纵向模式下看起来非常大。我可以通过让用户调整边距来解决这个问题,如屏幕4中所示。

如果您将预览(屏幕4中央的暗区)与Android默认启动器中的原始应用小部件进行比较,您会发现没有很好的匹配。我要问的是如何向用户呈现更好的预览(最接近实际的app-widget)。

谢谢你,请原谅我的英文

4 个答案:

答案 0 :(得分:2)

您是否已实施AppWidgetProvider.onAppWidgetOptionsChanged(Context, AppWidgetManager, int, Bundle)?所有行为良好的启动程序都应报告有关放置的窗口小部件的一些指标,您可以使用以下代码从捆绑包中检索这些指标:

int minwidth_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH);
int maxwidth_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH);
int minheight_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT);
int maxheight_dp = bundle.getInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT);

请注意,此处没有单元格的概念 - 这些指标对应于窗口小部件的实际大小,但是它会占用很多单元格。

股票启动器将这些映射到不同的方向,如下所示:

  

minwidth - >纵向宽度
  minheight - >景观高度
  maxwidth - >景观宽度
  maxheight - >肖像高度

任何在两个方向上保持相同行数和列数的启动器,并且调整单元格大小以适合屏幕,应该以相同的方式映射这些。请注意,假设这些关系始终保持不变可能会产生不希望的结果,如果您嵌入在启动器中,这些启动器会对其窗口小部件执行一些不寻常的操作 - 将它们放在屏幕的一部分中,或者使用不同方向的不同行数或列数。

或者,某些发射器可以在最小值和最大值中报告当前方向的指标,并在方向更改时使用新指标再次呼叫您。但是,如果您只对当前方向感兴趣,则这些发射器的行为与库存启动器的行为兼容。

答案 1 :(得分:0)

  

有没有办法获得启动器应用程序用于将应用程序小部件放在主屏幕上的网格单元的大小(或接近它)?

没有。欢迎每位主屏开发人员按照开发人员的意愿行事。

  

在这个启动器中,它在横向模式下看起来非常小,在纵向模式下非常大

然后提出适合这些尺寸的设计。例如,您可能会查看在主屏幕上运行时其他应用程序小部件的功能。

答案 2 :(得分:0)

我不知道如何进行可靠的预览,但根据方向使用不同的边距可能会有所帮助。您可以使用layout-land和layout-port指定具有不同边距的不同布局。

答案 3 :(得分:0)

我知道这已经有一段时间了,但我刚刚接受了我的另一个答案,所以我有机会用新鲜的目光瞥了一眼。

我认为原始问题的真正答案可能是自己设置小部件的大小,或者可能只是高度,因为这似乎是屏幕截图中的问题。在您的布局集layout_height="@dimen/my_perfect_height"中,启动器会将其置于单元格中。如果您需要一点灵活性,可以使用一些具有不同指标的不同布局,并让用户在它们之间进行选择。当然,你可以预测那个高度,因为你是设置它的人。