【问题标题】:How to vertically align text in a button with a background drawable?如何将按钮中的文本与背景可绘制对象垂直对齐?
【发布时间】:2011-02-16 07:41:06
【问题描述】:

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

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 个补丁图像,它们看起来一切正常。而且我还尝试使用常规的 png 作为背景,它也没有改变任何东西。

【问题讨论】:

    标签: android text button alignment


    【解决方案1】:

    您应该仔细检查您正在使用的 9 个补丁可绘制对象。标准的 Android 按钮在按钮的顶部和底部包含大量的填充,使文本看起来总是居中。您可以通过打开 9 个补丁文件,仔细放大并查看左侧/顶部和右侧/底部像素之间的差异来看到这一点。左/上侧标记图像的哪些部分可以拉伸以容纳更多文本,而右/下侧标记实际将填充文本的空间。所以右侧/底部和左侧/顶部之间的差异将是填充。一开始不太明白,但玩过之后感觉还不错。

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

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的问题,但是我的 9 个补丁绘图还可以。原因还是一样,只是我使用的是使用 layer-list 元素的自定义可绘制对象。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-06
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 1970-01-01
        • 2013-03-07
        • 2015-02-20
        • 2013-12-11
        相关资源
        最近更新 更多