在LinearLayout中水平居中TextView的Android实现

118

我有以下基本布局

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/title_bar_background">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:padding="10dp"
        android:text="HELLO WORLD" />

    </LinearLayout>
<LinearLayout>

看起来XML是正确的,但文本被左对齐了。TextView占据了父容器的整个宽度,TextView设置为居中对齐。不确定问题出在哪里...


3
请尝试在您的TextView中加入android:gravity="center"。 - user370305
5个回答

238
发生的情况是由于 TextView 填充了内部 LinearLayout 的 整个 宽度,因此它已经位于 布局 的水平中心。当您使用 android:layout_gravity 属性时,它将整个小部件放在指定的 gravity 中。 您真正想要做的不是将整个小部件居中,而是将 内容 放在中心位置,这可以通过使用 android:gravity="center_horizontal" 实现,同时可以删除 android:layout_gravity 属性。

3
如果我理解得正确,他可以将"android:layout_width="fill_parent""改为"wrap_content",然后使用"android:layout_gravity="center_horizontal""。我说的对吗? - Paweł Brewczynski
1
@bluesm 不,内部的LinearLayout不允许自身有未填充视图的空间(不考虑空LinearLayout的情况)。因此,在布局完成后,android:layout_width的值将保持不变。由于TextView的宽度等于内部LinearLayout的宽度,所以TextView实际上同时具有leftrightcenterandroid:layout_gravity值。 - Dan S
1
对于 ImageView,只有 layout_gravity 生效;对于 TextView,只有 gravity 生效。Android 真是太棒了!感谢所有美丽的 SO 帖子,没有它们开发就不可能实现。 - Atul
2
不要忘记添加 android:layout_width="match_parent" - Choletski

26

如果你想把<TextView>放在<Linearlayout>的中心位置,那么第一步必须强制设置android:layout_width="fill_parent",不需要使用任何其他的gravity属性。

    <LinearLayout
            android:layout_toRightOf="@+id/linear_profile" 
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:orientation="vertical"
            android:gravity="center_horizontal">
            <TextView 
                android:layout_height="wrap_content"
                android:layout_width="wrap_content"
                android:text="It's.hhhhhhhh...."
                android:textColor="@color/Black"

                />
    </LinearLayout>

24
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_bar_background">

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:padding="10dp"
    android:text="HELLO WORLD" />

</LinearLayout>


17

TextView中使用android:gravity="center"而不是layout_gravity


简短而精确的回答。谢谢 - nurnachman

3

只需使用:android:layout_centerHorizontal="true"

它会将整个TextView放在中心位置。


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