Android按钮居中文本

29

我的问题非常简单。 如何在Android上将按钮上的文本居中? 我尝试将填充设置为0,重力设置为中心,但运行时的结果仍然是文本水平居中而不是垂直居中。文本有一点向下偏移。

<Button
    android:id="@+id/btnSame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="10dip"
    android:layout_marginLeft="10dip"
    android:layout_marginRight="10dip"
    android:background="@drawable/layout_button_different"
    android:gravity="center_vertical|center_horizontal"
    android:height="30dp"
    android:padding="0dip"
    android:text="@string/equals"
    android:textColor="@drawable/layout_button_different"
    android:textSize="50dp"
    android:width="70dp" />

以下可能也有帮助: 在我的activity中,我这样做:

btnEquals.setCompoundDrawablesWithIntrinsicBounds(null,getResources().getDrawable(R.drawable.up2), null, null);
btnEquals.setPadding(0, 5, 0, 0);
btnEquals.setTextSize(15);
这有效,但之后我设置了这个:
btnEquals.setCompoundDrawables(null, null, null, null);
btnEquals.setPadding(0, 0, 0, 0);

结果是垂直对齐出了问题。

7个回答

50

很简单,你可以放置这个:

android:textAlignment="center"

1
这是一个很好的答案,但我认为你可以将它简化为一行代码 android:textAlignment="center"。 - AndroidDev
1
感谢 @Alex 的回答。 - Cabezas
不工作…… - reza_khalafi
@reza_khalafi,你确定吗? - Cabezas

23

由于您选择的尺寸,您现有的布局无法居中文本。您已将按钮高度设置为30dp,而您的文本大小为50dp,由于某些原因,Android 无法处理它并使文本居中。如果您将按钮变大或文本变小,则会发现居中工作正常。


如果高度为30dp,那么使用android:layout_height="wrap_content"有什么用? - Mohammed Azharuddin Shaikh
@hotveryspicy -- 把按钮布局放到一个xml文件中并加载它,你会发现在这种情况下wrap_content似乎不关心文本的溢出。我不知道为什么会这样,但至少在Eclipse可视化布局显示时是这样的(我没有把它放在设备上)。 - mah
谢谢,但是删除android:layout_height或android:layout_width会导致运行时异常。 - dieters
1
@dieters -- 没有人建议你删除它们;它们是 Android 所必需的。android:textSize="50dp" 是问题所在 -- 特别是如果你在代码中将其更改为 15;要么摆脱它,要么只在布局中将其设置为 15。 - mah
哈哈,我也遇到了同样的问题 :) 你救了我的周末 :) - ufk
android:gravity 用于指定视图内容的重力。android:layout_gravity 是子视图可以提供给其父视图的属性,用于指定视图相对于父视图的重力。 - Khay

1

有三个系统需要考虑:XML布局设计师、模拟器和真实手机。如果您指定gravity="center",按钮上的文本将如下所示。 在XML布局设计师中,它看起来像左侧字母位于按钮的中心,但其余字母位于右侧。(看起来不正确) 在模拟器中,文本会在中心显示。(正确) 在手机中,文本会在中心显示。(正确)


谢谢您的回答,我花了15分钟思考我哪里出错了,结果只是“看起来”不正确。 - Terence Chow

1

您只需将以下代码添加到布局的按钮中:

android:gravity="center"

0

在setPadding中,您也可以使用负数。如果您的字体很大而按钮很小,则可能会有所帮助。如果仍然偏离中心,请尝试将顶部或底部设置为更负数。


0

你只需要将 layout_height 设置为 wrap_content,并根据需要变化 padding 属性的值即可。


-2
<Button
                android:id="@+id/AnswerE"
                style="@style/defaultbuttonstyle"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center"
                android:onClick="AnswerCheck"
                android:text=" E "
                android:textStyle="bold" />

这对我有用


你没有很清楚地表明哪个属性可以帮助居中按钮的内容,在提供的问题内容中是“text”,属性android:gravity="center"可以帮助你居中内容。 - Khay

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