代码之家  ›  专栏  ›  技术社区  ›  alex.zherdev

如何将按钮中的文本与可绘制的背景垂直对齐?

  •  3
  • alex.zherdev  · 技术社区  · 16 年前

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

    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 回复  |  直到 15 年前
        1
  •  1
  •   Steve Haley    16 年前

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

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

        2
  •  1
  •   Emile    15 年前

    我有完全相同的问题,但我的9个补丁拉表是可以的。但原因还是一样的,只是我在使用layer list元素使用自定义的drawables。

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