【问题标题】:Android 9-patch too many columns and rows?Android 9-patch 太多的列和行?
【发布时间】:2012-06-28 11:03:41
【问题描述】:

我正在尝试使用 9-patch 作为 TextView 的背景,但它被视为普通图像文件。根据 9-Patch 工具和 Intellij IDEA Layout Preview,它应该可以正确拉伸。 我也在使用其他 9 补丁,所以问题不可能是由于我的系统配置错误(例如在另一种情况下缺少库)。

到目前为止我所做的工作清单:

  • 确保 9 色块周边仅包含完全透明或纯黑色像素。
  • 文件结尾是 *.9.png
  • 尝试了在图像中指定和不指定填充的情况

Here 是我想使用的图像。

刚才我看到 IDE 向我抛出这个“信息”: “错误:9 补丁图像 ...\res\drawable\timeline.9.png 格式错误。 9-patch 周长中的行和列太多。”

我不知道的 9 补丁有什么限制吗?尝试搜索文档以获取更多相关信息,但没有成功。

提前致谢, /我

P.S.:我知道可以通过删除段内的额外空间来优化图像,但仅此而已。一旦它按预期工作,我就计划这样做。

【问题讨论】:

    标签: android intellij-idea nine-patch


    【解决方案1】:

    使用 2 个水平标记,我可以使用 12 个垂直标记(再添加一个垂直或水平标记会产生该错误)。所以我认为它计算交叉点(H * V),根据其他答案,最大值可能是 25。


    更新:

    基于安卓代码:

    // Make sure the amount of rows and columns will fit in the number of
    // colors we can use in the 9-patch format.
    if (numRows * numCols > 0x7F) {
        errorMsg = "Too many rows and columns in 9-patch perimeter";
        goto getout;
    }
    

    最大值为 0x7F = 127。

    一个垂直标记被认为是一列,而水平标记是一排。因此,如果每个标记中有 5 个标记,则表示您有 5 个可拉伸 列 + 6 个不可拉伸 列(标记之间的区域),因此共有 11 个垂直且相同水平所以 11 * 11 = 121 小于 127 所以你很好

    在我的情况下,我有 12 个垂直 (12+13 =25) 和 2 个水平 (2+3 =5),所以 25*5=125 仍然小于 127。

    【讨论】:

      【解决方案2】:

      您必须在 9-patch 上设置文本区域。在图片的底部和右侧定义它。

      【讨论】:

      • 正如我所说,我已经尝试过使用和不指定填充区域(= 文本区域),并且根据文档是可选的。
      • 那么如果问题真的是因为你有太多的行和列,你就不能试着把你的图像分成几部分吗?左边一份,一份右边一份,重复很多次,中间?
      • 我也想过这个解决方案,但希望有办法避免它,因为我使用图像作为 Textview 的背景,它跨越了屏幕的整个宽度,我怀疑有一种方法可以正确连接多个 9 补丁。
      • 猜猜没有办法绕过它。感谢您的帮助。
      【解决方案3】:

      我上次检查的时间:

      最多可以使用 5 个填充标记。 最多也可以使用 5 个缩放标记。

      (更新:看起来有可能超过这个值。请参阅下面的附加评论。)

      【讨论】:

      • 我目前正在使用带有 12 个缩放标记的 9-patch,没有问题。所以限制介于 12-24(我的猜测是 20)标记之间。顺便说一句,你有一个相当不错的博客,理查德。保持! :)
      • 感谢您更新标记计数。上次我检查时,我无法超过 5。这可能是特定于 API 级别的吗?感谢善意的反馈:)
      • 在运行 4.2.2 的 Nexus 4 上,我可以有 25 个补丁(5 个水平标记和 5 个垂直标记)。
      【解决方案4】:

      我在我的项目中测试了 18 个垂直标记和 6 个水平标记,返回警告过多的行和列。然后我用了18个垂直标记和1个水平标记,很好:),我猜不会超过20个。

      【讨论】:

        【解决方案5】:

        我也达到了极限。针对 API 17 构建。我有一个网格,其中每个小时都有一列和 4 行。我玩了一下,我认为约束是补丁交叉点的数量。因此,如果我只有一个水平面片,我会在达到极限之前将其增加到大约 20 个垂直面片,但如果我有两个水平面片,我可能只会达到 10 个垂直面片。我尝试删除水平补丁,但随后出现错误“沿边缘未找到标记区域”。但是,如果我放弃调整高度并选择整个边缘作为水平面片,我可以添加所有 24 个垂直面片。我猜如果你让整个宽度或高度可调整大小,你可能会达到 40?只是基于我注意到的模式的有根据的猜测。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-28
          • 1970-01-01
          • 1970-01-01
          • 2010-12-19
          相关资源
          最近更新 更多