3

我为平板电脑开发了一个可调整大小的应用程序小部件。应用程序小部件在大多数带有大多数启动器的设备上运行良好,但是方向存在一些问题,尤其是在纵向模式下的 GO-HD 启动器上。app-widget 的高度太大,看起来不太好。

为了解决这个问题,我创建了一个方法,允许用户在应用程序小部件空间中设置任何额外的边距,他想让它看起来不错。例如,当设备处于纵向模式时,他可以设置额外的 20 像素上边距,而在横向模式下,他只能设置 5 像素等。

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

所以我的问题是:

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

- - 编辑 - -

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

射击

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

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

谢谢,请原谅我的英语

4

4 回答 4

3

你实施了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 -> 纵向高度

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

或者,一些启动器可能会以最小值和最大值报告当前方向的指标,并在方向改变时再次调用新指标。但是,如果您只对当前方向感兴趣,这些发射器的行为与股票发射器的行为兼容。

于 2013-04-01T06:40:11.487 回答
0

我知道已经有一段时间了,但我刚刚对我的另一个答案投了赞成票,所以我有机会用新的眼光来看看这个。

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

于 2014-01-04T15:32:17.103 回答
0

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

不可以。欢迎每个主屏幕开发人员做他们想做的事情。

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

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

于 2013-01-11T01:12:10.060 回答
0

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

于 2013-01-12T02:32:21.510 回答