2010-05-06 45 views
3

我有一个简单的按钮设置与背景图像等如何垂直对齐带有背景可绘制按钮的文本?

android:background="?attr/button" 

其中?attr/button是一个简单的9-补丁PNG基准定义。一切正常,按钮中的文本正确对齐。

然后我需要为按钮的按下状态有不同的背景。所以我改变了对

android:background="@drawable/state_button" 

其中@drawable/state_button是以下状态

<?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> 

此后,我不能正确对齐文本的XML。如果我输入android:gravity="center_vertical",文本会从顶部按钮高度的1/4左右绘制。

我仔细检查了9贴片图像,一切看起来都很好。而且我也尝试过为背景使用普通PNG,但它也不会改变任何内容。

回答

1

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

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

1

我有完全相同的问题,但我的9修补程序绘图是好的。原因仍然是相同的,只是我使用自定义绘图使用图层列表元素。

看起来,当按钮列出它的文本时,它会考虑到所有你的选择器中的状态。一旦我更新了所有状态以匹配对方,我的文本随后就会正确对齐。