首先我有一个按钮:
<Button
android:id="@+id/prefButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="Edit" />
因为我没有指定和textSize,所以它采用设备字体设置的默认值。添加按钮宽度和高度看起来很好。
现在的问题是当我想要添加背景图像(实际上是背景颜色但无法获得精确的argb值,因此使用图像)时,我补充道:
android:background="@drawable/backgroundImage"
并且图像大小为300x300像素。因此,现在我得到尺寸为300x300的按钮(显然)。
所以,现在我必须硬编码高度和宽度的值。并检查这些值是否合适,如果没有,我还必须再次对TextSize进行硬编码。
有没有办法让Button与以前保持一致,只需添加背景图片(可能更大)。
谢谢
答案 0 :(得分:3)
我能想到解决问题的更好方法是让你的图像更小并将其设置为9patch图像,这样可以拉伸以填充文本,就像默认按钮图像一样。在9patch图像中,您可以定义图像的拉伸部分,使其在拉伸时不会变形。 Here你可以看到如何绘制九个可伸缩的部件。
以下是对来自here
的九张图片的解释九补丁 NinePatchDrawable图形是一个可伸缩的位图图像,Android会自动调整大小以容纳您将其作为背景放置的View的内容。 NinePatch的一个示例用途是标准Android按钮使用的背景 - 按钮必须拉伸以适应各种长度的字符串。 NinePatch drawable是标准PNG图像,包括额外的1像素宽边框。必须使用扩展名.9.png保存,并保存到项目的res / drawable /目录中。
边框用于定义图像的可伸缩和静态区域。您可以通过在边框的左侧和顶部绘制一条(或多条)1像素宽的黑线来指示可伸展的部分(其他边框像素应该是完全透明或白色)。您可以拥有任意数量的可伸缩部分:它们的相对大小保持不变,因此最大的部分始终保持最大。
您还可以通过在右侧和底部线上绘制一条线来定义图像的可选可绘制部分(实际上是填充线)。如果View对象将NinePatch设置为其背景,然后指定View的文本,它将自行伸展,以便所有文本仅适合由右边和底线指定的区域(如果包含)。如果未包含填充线,Android将使用左侧和顶部线来定义此可绘制区域。
为了阐明不同线条之间的差异,左侧和顶部线条定义允许复制图像的哪些像素以拉伸图像。底部和右侧的线定义了图像中允许视图内容位于其中的相对区域。
以下是用于定义按钮的示例NinePatch文件:
这个NinePatch定义了一个带有左侧和顶部线的可伸展区域和带有底部和右侧线的可绘制区域。在顶部图像中,虚线灰色线标识将被复制以拉伸图像的图像区域。底部图像中的粉红色矩形标识允许View内容的区域。如果内容不适合此区域,则图像将被拉伸以便它们可以。
Draw 9-patch工具使用WYSIWYG图形编辑器提供了一种非常方便的方法来创建NinePatch图像。如果您为可伸展区域定义的区域由于像素复制而产生绘图工件的风险,它甚至会发出警告。