首先,我有一个按钮,如下所示:

android:id="@+id/prefButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal"

android:text="Edit" />

由于我未指定和textSize,因此它采用了设备字体设置的默认值.再加上Button的宽度和高度看起来也不错.

现在的问题是,当我想添加背景图像(实际上是背景颜色,但无法获得确切的argb值,因此使用图像)时,我添加了:

android:background="@drawable/backgroundImage"

图像大小约为300×300像素.因此,现在我得到大小为300×300的按钮(很明显).

因此,现在我必须对“高度”和“宽度”的值进行硬编码.并检查这些值是否看起来不错,如果不是,我还必须再次对TextSize进行硬编码.

有没有一种方法可以保持Button与以前相同,并且仅添加背景图像(可能更大).

谢谢

解决方法:

我可以想到的解决问题的更好方法是缩小图像并将其设置为9patch图像,这将使其像默认按钮图像一样伸展以填充文本.在9patch图像中,您可以定义图像的拉伸部分,以使其在拉伸时不会变形. Here您可以看到如何绘制一个九点可拉伸部件.

以下是从here拍摄的9补丁图像的说明:

九补丁

NinePatchDrawable图形是可拉伸的位图图像,Android会自动调整其大小以适应将其放置为背景的View的内容. NinePatch的一个示例用法是标准Android按钮使用的背景-按钮必须拉伸以容纳各种长度的字符串. NinePatch可绘制对象是标准的PNG图像,其中包括一个额外的1像素宽的边框.它必须以扩展名.9.png保存,并保存到项目的res / drawable /目录中.

边框用于定义图像的可拉伸和静态区域.您可以通过在边框的左侧和顶部绘制一条(或多条)1像素宽的黑线(其他边框像素应完全透明或白色)来表示可拉伸部分.您可以根据需要设置任意数量的可拉伸部分:它们的相对大小保持不变,因此最大的部分始终保持最大.

您还可以通过在右和底线上画一条线来定义图像的可选可绘制部分(实际上是填充线).如果View对象将NinePatch设置为背景,然后指定View的文本,它将自动拉伸,使所有文本仅适合由右行和底行指定的区域(如果包括).如果不包括填充线,Android将使用左和顶线定义此可绘制区域.

为了阐明不同线条之间的差异,左侧和顶部线条定义了允许复制图像的哪些像素以拉伸图像.底线和右线定义了允许视图内容位于图像内的相对区域.

这是用于定义按钮的示例NinePatch文件:

此NinePatch用左和顶线定义一个可拉伸区域,用底和右线定义可绘制区域.在顶部图像中,灰色虚线表示要拉伸图像以进行复制的图像区域.底部图像中的粉红色矩形表示允许查看内容的区域.如果内容不适合该区域,则图像将被拉伸以使其适合.

Draw 9-patch工具使用WYSIWYG图形编辑器提供了一种非常方便的方法来创建NinePatch图像.如果您为可拉伸区域定义的区域由于像素复制而有产生绘图伪影的风险,甚至会发出警告.

标签:button,background,android

来源: https://codeday.me/bug/20191127/2075514.html

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐