我设置了一个简单的按钮,背景图像定义为
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,它也没有改变任何东西。
答案 0 :(得分:1)
您应该仔细检查您正在使用的9个补丁绘图。标准的Android按钮在按钮的顶部和底部包含大量填充,使其看起来像文本始终居中。您可以通过打开9补丁文件,密切放大并查看左/上和右/下像素之间的差异来看到这一点。左/上侧标记可以拉伸图像的哪些部分以容纳更多文本,而右/下侧标记实际上将填充文本的空间。因此,右/底侧和左/顶部之间的差异将是填充。它起初并没有多大意义,但在玩完之后它并没有那么糟糕。
如果您不熟悉它,编辑9patches的有用工具是SDK工具文件夹中的draw9patch.bat程序。
答案 1 :(得分:1)
我有完全相同的问题,但是我的9个补丁抽签是好的。原因仍然是相同的,只是我使用了layer-list元素的自定义drawable。
当按钮显示其文本时,它会考虑选择器中所有状态。一旦我更新了所有状态以匹配彼此,我的文本随后正确对齐。