Android 控件错误的网格大小

Android 控件错误的网格大小,android,widget,sizing,android-appwidget,Android,Widget,Sizing,Android Appwidget,我写了一个小部件,应该是4x2的主屏幕块。它的最小高度和最小宽度,根据当前的“应用程序小部件设计指南”页面是 如果系统版本低于冰淇淋三明治,则从dimens.xml应用填充 在我的Nexus4(xhdpi,Jellybean 4.2.1)上,这个小部件是4x2。在模拟器(hdpi,姜饼2.3.3)上,这个小部件是4x2。然而,在我的Nexus7(hdpi,Jellybean 4.2.1)上,小部件是3x2。我一辈子都搞不懂为什么或者如何修复它。有什么想法吗?拉尔斯·沃格尔写道: 作为计算规则,您

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

如果系统版本低于冰淇淋三明治,则从dimens.xml应用填充

在我的Nexus4(xhdpi,Jellybean 4.2.1)上,这个小部件是4x2。在模拟器(hdpi,姜饼2.3.3)上,这个小部件是4x2。然而,在我的Nexus7(hdpi,Jellybean 4.2.1)上,小部件是3x2。我一辈子都搞不懂为什么或者如何修复它。有什么想法吗?

拉尔斯·沃格尔写道:

作为计算规则,您应该使用以下公式定义小部件的大小:((列/行数)*74)-2。这些是独立于设备的像素,-2用于避免舍入问题

编辑:显然是Vogel从中获得的(向下滚动到中间页面以查看参考资料)

基于此测量,对于4格宽和2格高,使用294 x 146倾角:

<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,如果使用旧测量值,Nexus 7上会发生什么?我知道它会工作,因为我在这些小部件的前一个版本上使用了旧的度量。然而,在我的Nexus4上,使用旧的测量方法,例如1x1切换小部件测量为2x2。新的测量应该是针对冰激凌三明治以及操作系统应用其自身填充物的地方。Nexus7运行的是4.2,因此应该使用新的测量值。如果检测到操作系统为3.x或更低,我会自动在小部件上添加一个填充。您正在按照新的指导原则进行所有操作。我的答案只是说如何修复它——保留旧的测量值——但你已经知道了。至于为什么会发生这种情况,我猜是Nexus 7的tvdpi的“特殊”dpi造成了问题,但我恐怕不知道如何进一步调查:
<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" />