如何在带有背景图案的按钮中垂直对齐文本?

3

我有一个简单的按钮,背景图像定义如下:

android:background="?attr/button"

?attr/button 是对一个简单的9-patch png文件的引用。一切都正常,按钮中的文本对齐正确。

后来,我需要为按下状态的按钮设置不同的背景。所以我做了以下更改:

android:background="@drawable/state_button"

其中@drawable/state_button是一个包含以下状态的XML文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
        android:drawable="@drawable/button_pressed" /> <!-- focused -->
    <item android:drawable="@drawable/button" /> <!-- default -->
</selector>

之后我无法正确对齐文本。如果我加入 android:gravity="center_vertical",文本将从按钮顶部绘制约1/4的高度。

我已经仔细检查了我的9-patch图像,一切似乎都没问题。我还尝试使用常规png作为背景,但也没有改变任何东西。

2个回答

1
你应该仔细检查你正在使用的9patch可绘制对象。标准的Android按钮在按钮的顶部和底部包含大量填充,使得它看起来像文字始终居中。您可以通过打开9patch文件,放大并查看左侧/上侧和右侧/下侧像素之间的差异来了解此情况。左/上侧标记可拉伸以适应更多文本的图像部分,而右/下侧标记将实际填充文本的空间。因此,右/下边缘与左/上边缘之间的差异将是填充区域。一开始可能不太容易理解,但是玩弄一下后就不那么难了。

以防您不熟悉它,编辑9patches的有用工具是SDK工具文件夹中的draw9patch.bat程序。


1

我遇到了完全相同的问题,但我的9 patch可绘制对象没有问题。原因仍然是相同的,只是我使用了使用layer-list元素的自定义可绘制对象。

似乎当按钮布置其文本时,它会考虑您选择器中的所有状态。一旦我更新了所有状态以相互匹配,我的文本随后正确对齐。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接