3

我的 Android 应用程序的用户报告包含的应用程序小部件太大。

我用过这个公式:

width/height = (number-of-cells * 74) - 2

所以我得到了一个 4x1 小部件的 294dp 宽度和 72dp 高度。但是,正如我所说,用户报告说小部件比 4x1 占据更多的位置。

这怎么可能发生?不同的安卓版本有区别吗?

编辑:我已将其设置为最小宽度/高度和调整宽度/高度。我的这个 appwidget 的布局文件使用fill_parent,所以它不应该扩展那个大小。

4

2 回答 2

5

此文档页面(我想与 Android 4.x 相关)显示公式为:

width/height = `70 * n - 30`

...n采取的细胞数量在哪里。它还提到...

添加您的小部件时,它将被拉伸以在水平和垂直方向上占据最小数量的单元格,以满足其 minWidth 和 minHeight 约束

根据问题中给出的尺寸,您的应用程序将扩展到 5 个单元格(320dp;250dp 不够)宽度方向和 2 个单元格(110dp;40dp 不够)高度。

于 2012-11-12T17:42:43.850 回答
4

为不同的 Android 版本支持不同的小部件非常简单。

为了支持 Android 版本 >= 4.0,您必须将小部件的内容放在正确的文件夹中。

  • /res/xml-v14
  • /res/layout-v14[选修的]

-v14表示 API-Level 14 (Android 4.0)。Android 版本高于或等于 4.0 将使用这些文件夹中的文件。不要忘记计算android:minWidthandroid:minHeight使用正确的公式:

cell_size in dp = 70 × n − 30

您可以将工作小部件留在现有文件夹中:

  • /res/xml
  • /res/layout

使用正确的论坛:

cell_size in dp = 74 × n - 2

为了保持简单并重复使用计算的尺寸,您还可以在正确的文件夹中创建正确的尺寸并参考尺寸。

  • 创建一个/res/values/widget_size.xml包含 Android 版本 < 4.0 的尺寸的文件
<resources>
    <dimen name="cell_size_1">72dp</dimen>
    <dimen name="cell_size_2">146dp</dimen> 
</resources>
  • 创建一个/res/values-v14/widget_size.xml包含 Android 版本 >= 4.0 的尺寸的文件
<resources>
    <dimen name="cell_size_1">40dp</dimen>
    <dimen name="cell_size_2">110dp</dimen>
</resources>
  • 将小部件的大小引用到新创建的尺寸。
android:minWidth="@dimen/cell_size_2"
android:minHeight="@dimen/cell_size_1"

不幸的是,这不适用于运行 Android 4.04 的 Galaxy Tab 7.7。3x1 小部件是 2x1,尽管它在模拟器上显示正确的大小。我认为这是因为

虽然单元格的宽度和高度以及应用于小部件的自动边距数量可能因设备而异,但您可以使用下表粗略估计小部件的最小尺寸,给定所需的占用网格单元数:

App Widget Design Guidelines中说明

于 2013-03-06T11:41:38.843 回答