【问题标题】:Android app widget too big although used formula尽管使用了公式,但 Android 应用程序小部件太大
【发布时间】:2012-11-12 17:29:01
【问题描述】:

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

我用过这个公式:

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

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

怎么会这样?不同的安卓版本有区别吗?

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

【问题讨论】:

  • 你有截图吗?或要求用户截屏。也许用户只想要布局内的一些填充。我使用 android:minWidth="294dip" android:minHeight="72dip" 它在 android 2.1 到 android 4.2 上非常完美 :)
  • 是的,这些也是我使用的值。但对于 Android 4.0+,它们肯定是不正确的。请参阅文档中给出的公式(raina77ow 的答案中的链接)。也许您没有将目标 SDK 级别设置为 14+,这是真的吗?也许这会导致您的值在 Android 4 上仍然有效?!

标签: android android-appwidget


【解决方案1】:

This documentation page(我想与 Android 4.x 相关)表明公式为:

width/height = `70 * n - 30`

... 其中n 是占用的单元格数。它还提到...

当你的小部件被添加时,它会被拉伸到最小 满足其要求的水平和垂直单元数 minWidth 和 minHeight 约束

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

【讨论】:

  • 谢谢!这是新的,适用于 Android 4.0+ 吗?我确定这是我对早期版本的价值观,这是真的吗?那么如果我的应用必须涵盖 Android 2.2 到 Android 4.1,我应该依赖哪些尺寸?
  • 我不确定,但看起来公式在 Android 4.0 中发生了变化(我快速浏览了 Wayback Machine,似乎证实了这个建议;公式是你的那个'已在该页面的 Android 3.1 版本中显示)。
  • 非常感谢!你看,这让一切都变得非常困难。如果应用程序不仅涵盖 Android 4.0,有人知道要使用哪些值吗?这应该是许多开发者必须面对的问题,因为大多数应用都支持 Android 2,或者至少也支持 Android 3。
【解决方案2】:

为不同的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 版本 的尺寸
<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

【讨论】:

  • 谢谢!另一种可能性是拥有一个通用的 XML 和布局文件夹,并且只将维度放在特定于版本的文件夹中。顺便说一句,我有一台三星设备,它也将小部件显示为 3x1 而不是 4x1。
  • 这似乎是一个相当简单的解决方案(将更新我的答案)。您正在运行(原始)三星 Android 版本吗?也许这是三星特有的问题。
  • 是的,我拥有三星 Galaxy Tab 2 10.1 并且正在运行库存软件。可能是三星特有的,是的。
  • 我在其他设备上遇到了同样的问题。以 Nexus 7 为例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-01
  • 2021-07-18
  • 1970-01-01
  • 2013-02-21
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多