Android中的按钮文本垂直对齐存在问题

12

我在我的Android应用中遇到了按钮文本对齐的问题。我在XML中这样定义了一个按钮:

<Button
        android:id="@+id/reportanissuebutton"
        android:layout_width="272sp"
        android:layout_height="32sp"
        android:text="@string/button_report_issue"
        android:textColor="#fff"
        android:textSize="18sp"
        android:gravity="center_vertical|center_horizontal"
        android:background="@xml/report_issue_button"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="40sp"/>
结果是这样的:

结果如下:

button.jpg

我希望文字在垂直和水平方向上都居中,就像应用程序中的所有其他按钮一样,但是对于这个按钮,它稍微往下偏移了一点。我似乎无法弄清楚为什么会这样,所以需要帮助。

编辑: 下面是按钮背景的XML:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="6dp" />
    <stroke android:color="#c2c2c2" android:width="2dp" />
    <gradient 
        android:angle="90"
        android:startColor="#000"
        android:endColor="#919191"/>
</shape>

文本已经居中了,您还想要更改什么? - Lavanya
它没有垂直居中,顶部比底部有更多的空间。 - jvergeldedios
我猜你可以尝试设置填充。 - Lavanya
@Rosalie:我设置了 android:paddingBottom="3sp",这样似乎可以正确对齐。不过,我还是很好奇为什么这个按钮是整个应用中唯一一个无法自动对齐文本的按钮。 - jvergeldedios
如果你想让它看起来“居中”,那么可以使用填充来改变它的外观。 - Asahi
显示剩余5条评论
9个回答

49

试试这个:

android:includeFontPadding="false"

它帮助我解决了一个类似的问题。


6
这个操作以及将paddingTop和paddingBottom设置为0dp有所帮助。 - plackemacher
2
终于有个聪明的人说出了正确答案,而不是那些每个安卓开发者都已经知道的东西! - Renetik

8
如果您正在以编程方式构建视图,请使用以下方法:
button.setIncludeFontPadding(false);

5

这对我有用:

android:gravity="fill_vertical"

希望能帮到你!

像魔法一样运作良好。 - Java Nerd

3
尝试这个:dip 将在不同设备上比 sp 更好地缩放,声明“无重力”默认完全居中。
<Button
    android:id="@+id/reportanissuebutton"
    android:layout_width="272dip"
    android:layout_height="32dip"
    android:text="@string/button_report_issue"
    android:textColor="#fff"
    android:textSize="18dip"
    android:background="@xml/report_issue_button"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="40sp"/>

此外:我遇到了同样的问题,当字体太高时,按钮就会出现这种情况,尝试稍微减小字体大小或增加按钮高度....这解决了我的问题。

1
这对我有用:

这适合我:

android:layout_gravity="center_vertical"

0

S的真正完整答案是这样的...

   <item name="android:includeFontPadding">false</item>
   <item name="android:paddingTop">0dp</item>
   <item name="android:paddingBottom">0dp</item>

在某些情况下,当所需按钮高度与字体大小相比过小时。


0

我遇到了垂直文本对齐的问题。
结果发现,这是因为在按钮的父样式中通过设置android:lineSpacingExtra增加了垂直行间距。
所以请确保您没有指定它或设置android:lineSpacingExtra="0dp"(如果您必须覆盖父样式)。


0

我使用这个:

    <com.google.android.material.button.MaterialButton
    android:minWidth="1dp"
    android:gravity="center_horizontal"
    android:text="O\nP\nC\nO\nN\nE\nS"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

我刚刚添加了一个换行符


-2

使用

android:layout_height="wrap_content"

这一定会解决你的问题。

如果你觉得有用,请不要忘记将其标记为答案。

最好的问候,

~ Anup


不,这就是它现在的样子: 链接我还会将我用于按钮背景的XML添加到原始问题中。 - jvergeldedios
不确定我是否理解您的问题,我在上面的评论中发布的图像显示了将“android:layout_height =” 32sp“替换为”android:layout_height =“ wrap_content”的结果。 - jvergeldedios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接