小部件网格尺寸错误

13

我已经编写了一个小部件,应该是4x2个主屏幕块。根据当前的“应用程序小部件设计指南”页面,它的最小高度和最小宽度为:

android:minWidth="250dp"
android:minHeight="110dp"

如果系统版本低于Ice Cream Sandwich,则从dimens.xml应用填充。

在我的Nexus 4(xhdpi,Jellybean 4.2.1)上,此小部件为4x2。在模拟器(hdpi,Gingerbread 2.3.3)上,此小部件为4x2。然而,在我的Nexus 7上(hdpi,Jellybean 4.2.1),小部件为3x2。我无法想出为什么或如何修复它。有任何想法吗?

1个回答

11
根据Lars Vogel在此主屏幕小部件教程中的写作,他提出了如下计算公式来确定小部件的尺寸:((列数/行数)*74)-2。这些单位是设备独立像素,其中的"-2"用于避免四舍五入问题。
编辑:显然Vogel是从旧的小部件API文档中得到这个公式的(向下滚动到中间页面查看参考文献)。
基于这个测量结果,对于4列宽和2行高,使用294 x 146 dip的大小。
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dip" android:minHeight="146dip"
    android:updatePeriodMillis="0" android:initialLayout="@layout/some_layout" />

正如您所说,294x146是基于过时的文档。根据新文档,我使用了正确的尺寸来创建一个基于新文档的4x2小部件,并且在除了我的Nexus 7之外的所有设备上,该小部件都被注册为4x2大小。而在我的Nexus 7上,它被注册为3x2大小。 - Nick
如果您在Nexus 7上使用旧的测量方法会发生什么? - Gunnar Karlsson
我知道它会起作用,因为我在以前的这些小部件版本中使用了旧的测量值。然而,使用旧的测量值,例如1x1的切换小部件,在我的Nexus 4上测量为2x2。新的测量值应该适用于Ice Cream Sandwich及更高版本,其中操作系统应用其自己的填充。Nexus 7正在运行4.2,因此应该使用新的测量值。如果检测到操作系统为3.x或更低版本,则自动对小部件应用填充。 - Nick
1
你按照新指南做的一切都很好。我的答案只是告诉你如何修复它 - 保留旧的测量标准 - 但你已经知道了。至于为什么会出现这种情况,我猜测 Nexus 7 的“特殊”tvdpi 密度可能是导致问题的原因,但恐怕我不知道如何进一步追究这个问题:https://plus.google.com/105051985738280261832/posts/6eWwQvFGLV8 - Gunnar Karlsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接