如何垂直对齐按钮中的文本与背景drawable?

时间:2010-05-06 09:23:39

标签: android text button alignment

我设置了一个简单的按钮,背景图像定义为

android:background="?attr/button"

其中?attr/button是对简单的9补丁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张补丁图片,一切看起来都不错。而且我也尝试过为背景定期的png,它也没有改变任何东西。

2 个答案:

答案 0 :(得分:1)

您应该仔细检查您正在使用的9个补丁绘图。标准的Android按钮在按钮的顶部和底部包含大量填充,使其看起来像文本始终居中。您可以通过打开9补丁文件,密切放大并查看左/上和右/下像素之间的差异来看到这一点。左/上侧标记可以拉伸图像的哪些部分以容纳更多文本,而右/下侧标记实际上将填充文本的空间。因此,右/底侧和左/顶部之间的差异将是填充。它起初并没有多大意义,但在玩完之后它并没有那么糟糕。

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

答案 1 :(得分:1)

我有完全相同的问题,但是我的9个补丁抽签是好的。原因仍然是相同的,只是我使用了layer-list元素的自定义drawable。

当按钮显示其文本时,它会考虑选择器中所有状态。一旦我更新了所有状态以匹配彼此,我的文本随后正确对齐。