14

在此处输入图像描述

考虑上图。- 虚线划分了 9-Patch png,我将从 Photoshop 文件中切出。我需要它来创建一个弹出框。- 盒子包含一个 dropShadow,如这张照片中的测量工具所示。- 粉色线条显示我将如何使用 draw9Patch 工具创建 9-Patch。

我的问题是:如果我有一个带有 9-Patch 的视图“容器”作为背景,我需要确保它的子视图始终位于白框内。我打算为此使用填充。我打算将填充设置为等于测量工具。因此,如果它在 Photoshop 中为 30px,我将为layout_paddingLeft"=30dp"容器设置。(设计采用 MDPI,所以我认为这种转换是可以的)。然而,不同密度的屏幕如何处理 9path。例如,测量区域是30px还是30dip

4

1 回答 1

24

通过该draw9patch工具,您可以定义:

在此处输入图像描述

  • 垂直拉伸:左侧的黑色像素
  • 水平拉伸:顶部的黑色像素
  • 垂直内容:右侧的黑色像素
  • 水平内容:底部的黑色像素

请注意,拉伸像素不必是连续的,因此您可以从拉伸中排除某些特定切片(查看上面的弹出箭头)。同时,您可以合理地了解内容的放置位置,只需查看右侧的预览,其中包含紫色区域。您可以假设,这样您就不必指定任何填充在您的布局中:视图将使用您设置为 background 的 9patch 考虑这些值

非拉伸区域随像素密度缩放。因此,如果您将上面的 9patch 设置为mdpi资产,则最左上角的切片将在 50x40 像素区域@mdpi 和 100x80 像素区域@xhdpi 中呈现。最左边的拉伸区域改为根据 dpi 排列宽度,而高度根据内容排列。其他拉伸切片以类似的方式工作。

在这两种情况下,处理“低分辨率”9patch 都会导致丑陋的像素化伪影。一种可能的解决方案是为每个支持的 dpi 提供不同的 9patch,或者只定义较高的 dpi (xhdpi) 并让 Android 相应地缩小它们。

内容边界也被处理dp,因此它们根据像素密度进行缩放。例如:在原始 9patch 中定义为 40px@mdpi 的左填充,将被转换为 80px@xhdpi,因此内容永远不会流出给定的边界。请注意,您甚至可以通过padding*布局中的属性覆盖 9patch 中指定的内容边界。

于 2013-02-20T14:40:34.617 回答