Android - TextView horizontal in LinearLayout zentrieren

110

Ich habe das folgende Grundlayout

<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>

Es scheint, dass die XML korrekt ist, aber der Text ist nach links ausgerichtet. Die Textansicht nimmt die gesamte Breite des übergeordneten Elements ein und die Textansicht wird so eingestellt, dass sie zentriert ist. Ich bin mir nicht sicher, wo das Problem liegt ...

Jake Wilson
quelle
2
Versuchen Sie Android: Gravity = "Mitte" für Ihre Textansicht
user370305

Antworten:

227

Da die Textansicht die gesamte Breite des inneren LinearLayouts ausfüllt, befindet sie sich bereits in der horizontalen Mitte des Layouts . Wenn Sie es verwenden android:layout_gravity, wird das Widget als Ganzes in der angegebenen Schwerkraft platziert. Anstatt das gesamte Widget-Center zu platzieren, versuchen Sie wirklich, den Inhalt in das Center zu platzieren, was mit erreicht werden kann, android:gravity="center_horizontal"und das android:layout_gravityAttribut kann entfernt werden.

Dan S.
quelle
3
Wenn ich es richtig verstehe, könnte er "android: layout_width =" fill_parent "in" wrap_content "ändern und dann android: layout_gravity =" center_horizontal "verwenden. Habe ich recht?
Paul Brewczynski
1
@bluesm Nein, das innere LinearLayout erlaubt sich keinen Platz, der nicht mit einer Ansicht gefüllt ist (ohne den Fall eines leeren LinearLayout). Somit hat das den android:layout_widthgleichen Wert (nach dem Layout). Da die Breite des Textview auf dem mit dem inneren Linearlayout gleich ist die Textview hat effektiv die android:layout_gravityWerte von left, rightund centerzur gleichen Zeit.
Dan S
1
Für ImageViewsein layout_gravityund für TextViewsein gravityist, was nur funktioniert. Android ist großartig! Vielen Dank an alle schönen SO-Beiträge, ohne die eine Entwicklung einfach nicht möglich war.
Atul
1
nicht vergessen android:layout_width="match_parent"
Choletski
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>

JoeLallouz
quelle
24

Wenn Sie setzen <TextView>in in der Mitte die <Linearlayout>erste Stelle setzen dann android:layout_width="fill_parent"obligatorisch
Bedarf Keine andere Schwere der Verwendung

    <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>
patel135
quelle
16

Verwenden Sie android:gravity="center"in TextViewanstelle von layout_gravity.

Schwarzer Gürtel
quelle
Kurze und präzise Antwort. Vielen Dank
Nurnachman
4

Verwenden Sie einfach: android: layout_centerHorizontal = "true"

Dadurch wird die gesamte Textansicht in die Mitte gestellt

charlenecipres
quelle