Android 为什么我的主屏幕小部件占用两行而不是一行?

Android 为什么我的主屏幕小部件占用两行而不是一行?,android,android-widget,Android,Android Widget,所以我阅读了小部件的大小并创建了一个250dpX72dp小部件,希望它每行占用4列。在我的2.2设备上,它确实如预期的那样显示,但在我的4.2设备上,它突然占用了4x2 我认为每个单元格的大小计算为(单元格*74)-2 小部件定义如下: <?xml version="1.0" encoding="utf-8"?> <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"

所以我阅读了小部件的大小并创建了一个250dpX72dp小部件,希望它每行占用4列。在我的2.2设备上,它确实如预期的那样显示,但在我的4.2设备上,它突然占用了4x2

我认为每个单元格的大小计算为(单元格*74)-2

小部件定义如下:

 <?xml version="1.0" encoding="utf-8"?>
 <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/widget"
    android:minHeight="72dp"
    android:minWidth="250dp"
   />

看看:


因此,似乎72dp映射到2个单元格。

考虑到Stackoverflow的多个问题,我并不是唯一一个感到困惑的人

谷歌似乎确实改变了小部件大小的计算方式——相当引人注目


您需要从API 11开始应用不同的公式;根据its(70*n)-30;这意味着您应该将最小高度设置为40。您可以在不同的资源文件夹中为高度创建两个资源(分别是
values
values-v11
),这样您可以根据
values/.xml
中的旧公式指定高度,并根据
values-v11/.xml
中的新公式指定高度

请注意,您还应考虑API 15以上的利润率,这是以类似的方式完成的:

不过,在较新的设备上,大小调整似乎仍然有一个怪癖,250dp将占用3列而不是4列


另请参见

这在android版本中是否发生了变化?小部件将在主屏幕上占用一定数量的单元格。单元格通常用于显示一个应用程序的图标。作为计算规则,您应该使用以下公式定义小部件的大小:((列/行数)*74)-2。这些是独立于设备的像素,-2用于避免舍入问题。另外,我的老款安卓设备只显示了一行,我猜是由于蜂巢和ICS+允许调整主屏幕小部件的大小,谷歌做出了改变。如果你的目标是SDK 14,根据我的链接,他们会自己增加少量的利润。@user1993392 Vogella的文章已经过时了。因为ICS是(70*n)-30,所以新的公式你确定你应该考虑API 15的利润,不是API 14吗?另外,你需要从API 14开始应用不同的公式,而不是从API 11开始。蜂窝状原料药(11、12和13)使用原始配方(74 x n)-2