Wie zentriere ich Text horizontal und vertikal in einer Textansicht?

2026

Wie zentriere ich den Text horizontal und vertikal in a TextView, sodass er genau in der Mitte des TextViewIn angezeigt wird Android?

pupeno
quelle
7
Setzen Sie sowohl layout_width als auch layout_height auf fill_parent und setzen Sie dann die Schwerkraft auf center. Das wird den Trick machen
Amila
2
fill_parent ist jetzt veraltet. Verwenden Sie daher MATCH_PARENT in layout_width und layout_height und setzen Sie die Schwerkraft der TextView auf center.
Bilal Ahmad

Antworten:

3086

Ich gehe davon aus, dass Sie XML-Layout verwenden.

<TextView  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center"
    android:text="@string/**yourtextstring**"
/>

Sie können auch die Schwerkraft center_verticaloder center_horizontalje nach Bedarf verwenden.

und wie @stealthcopter in Java kommentierte: .setGravity(Gravity.CENTER);

Rechnung
quelle
58
Dies funktioniert nicht, wenn es mit einem RelativeLayout verwendet wird, bei dem Höhe und Breite des Layouts auf wrap_content festgelegt sind
Rob
96
@Rob, wenn Breite und Höhe wrap_content sind, ist der Text technisch bereits zentriert.
JoJo
3
Wenn ich TextView relativ zu einer anderen Ansicht ausrichten möchte, der Text jedoch in sich selbst zentriert ist?
9
Das funktioniert bei mir nicht ( android:gravity="center"). Es wird immer noch ganz links auf dem Bildschirm angezeigt. :(
uSeRnAmEhAhAhAhAhA
30
Nicht zu verwechseln mit android:layout_gravity="center"etwas anderem.
Rudi Kershaw
445
android:gravity="center" 

Dies wird den Trick tun

Jean
quelle
32
Die Textansicht muss match_parent oder fill_parent sein, damit dies funktioniert. Wenn sein Wrap-Inhalt, wird es nicht zentriert.
Kalel Wade
7
@KalelWade: Das Zentrieren von Text in einer Textansicht mit wrap_content macht überhaupt keinen Sinn. Vielleicht möchten Sie eine Textansicht in einer übergeordneten Ansicht zentrieren. In diesem Fall fügen Sie diese Zeile einfach in die übergeordnete Ansicht ein.
Mooing Duck
@Mooing Duck Der Grund, keinen Wrap-Inhalt zu verwenden - macht keinen Sinn. Aber wenn Sie entweder fertig werden und einfügen oder nur eilen, können Sie möglicherweise nicht zwei und zwei zusammenfügen. Deshalb habe ich es erwähnt.
Kalel Wade
1
Wenn sich TextView mit Breite und Höhe gleich "wrap_content" in LinearLayout mit Breite und Höhe "match_parent" befindet, müssen Sie die layout_gravity von Linear_layout festlegen.
Faisal Naseer
1
@MooingDuck, wenn die Höhe "wrap_content" und die Schwerkraft "center_vertical" ist, wird Design (Vorschau) als zentriert gezeichnet, aber in einem Gerät wird es oben positioniert. Machen Sie also die Höhe "match_parent" und setzen Sie die Schwerkraft auf "center_vertical" oder "center".
CoolMind
297

Sie können es auch dynamisch einrichten, indem Sie:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
zeevb
quelle
141
Oder einfach textview.setGravity (Gravity.CENTER);
Amplify91
Nach welchen Kriterien kann beurteilt werden, welcher Weg gewählt, in XML oder in eine Java-Datei geschrieben werden soll?
Kenju
2
@ Kenju, wenn Sie möchten, dass es leicht bearbeitet werden kann und sich der Wert zur Laufzeit nicht ändert: XML. Wenn Sie den Wert in Echtzeit ändern müssen (z. B. die Ausrichtung ändern, wenn der Benutzer eine Taste drückt), können Sie dies nur über Java tun.
Gustavo Maciel
2
@GustavoMaciel also, im Grunde genommen XML, es sei denn, es muss dynamisch geändert werden ... Jetzt habe ich es. Vielen Dank für Ihre einfache und nützliche Antwort!
Kenju
115
android:layout_centerInParent="true"

Dies funktioniert bei Verwendung mit einem RelativeLayout, bei dem Höhe und Breite des Layouts auf wrap_content festgelegt sind.

itherese
quelle
19
Dadurch wird die Textansicht zentriert, nicht der darin enthaltene Text.
Anthropomo
2
Dies funktioniert NICHT, wenn in der Datei ein Zeilenumbruch vorhanden ist TextView. Der Text ist in voller Breite und mehrzeilig und linksbündig innerhalb der TextView. Es erscheint linksbündig auf dem Display. Sie sollten "Schwerkraft" verwenden, wie in den anderen Antworten angegeben.
David Manpearl
83

Sie können auch die Kombination verwenden:

android:gravity="left|center"

Wenn die Breite der Textansicht größer als "fill_parent" ist, wird der Text weiterhin nach links ausgerichtet (nicht zentriert, da die Schwerkraft nur auf "center" gesetzt ist).

Szorstki
quelle
56

Schwerkraft anwenden:

TextView txtView = (TextView) findViewById(R.id.txtView);
txtView.setGravity(Gravity.CENTER_HORIZONTAL);

Für vertikale:

txtView.setGravity(Gravity.CENTER_VERTICAL);

In XML:

<TextView      
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"
    android:text="@string/Hello_World"        
/>
Gaganpreet Singh
quelle
42

Es gibt zwei Möglichkeiten, dies zu tun.

Der erste im XML-Code. Sie müssen auf das GravityAttribut achten . Sie finden dieses Attribut auch im Grafikeditor. Es ist möglicherweise einfacher als der XML-EDITOR.

<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal"
    android:text="Your Text"
/>

Für Ihr spezifisches Szenario sind die Schwerkraftwerte:

center_vertical|center_horizontal

Im grafischen Editor finden Sie alle möglichen Werte, sogar deren Ergebnisse.

Cristiano Guerra
quelle
41

Wenn Sie TableLayout verwenden, stellen Sie sicher, dass auch die Schwerkraft der TableRows auf Mitte eingestellt ist. Sonst funktioniert es nicht. Zumindest hat es bei mir nicht funktioniert, bis ich die Schwerkraft der TableRow auf Mitte gestellt habe.

Zum Beispiel so:

<TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center">        
    <TextView android:text="@string/chf" android:id="@+id/tv_chf" android:layout_weight="2" android:layout_height="wrap_content" android:layout_width="fill_parent" android:gravity="center"></TextView>        
</TableRow>
Maverick1st
quelle
Interessant. Sie müssen überprüfen, ob dies auch für LinearLayout (das übergeordnete TableRow-Element) gültig ist.
Martin
38

Sie müssen die TextView-Schwerkraft (Mitte horizontal und Mitte vertikal) wie folgt einstellen :

android:layout_centerHorizontal="true"   

und

android:layout_centerVertical="true"

Und dynamisch mit:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
NagarjunaReddy
quelle
Codesemantik ist falsch. Ersetzen Sie layout_centerhorizontalund layout_centerverticaldurch layout_centerHorizontalund layout_centerVertical("H" und "V" in Großbuchstaben, sonst funktioniert es nicht).
Yugidroid
2
layout_ * teilt dem übergeordneten Element der Ansicht mit, wo es sein möchte. Ohne layout_ * teilt der Ansicht mit, wie ihre Komponenten platziert werden sollen
Dandre Allison
34

Meiner Meinung nach,

android:gravity="center"

ist besser als,

android:layout_centerInParent="true"

das ist besser als,

android:layout_centerHorizontal="true"
android:layout_centerVertical="true"

Zumindest zum Formatieren von Text.

Epik42
quelle
30

Für lineares Layout: Verwenden Sie in XML so etwas

<TextView  
    android:id="@+id/textView1"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center_vertical|center_horizontal"
    android:text="Your Text goes here"
/>

Verwenden Sie dazu zur Laufzeit so etwas in Ihrer Aktivität

TextView textView1 =(TextView)findViewById(R.id.texView1);
textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

Für das relative Layout: Verwenden Sie in XML Folgendes

<TextView  
    android:id="@+id/textView1"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_centerInParent="true"
    android:text="Your Text goes here"
/>

Verwenden Sie dazu zur Laufzeit so etwas in Ihrer Aktivität

TextView textView1 =(TextView)findViewById(R.id.texView1);
RelativeLayout.LayoutParams layoutParams = RelativeLayout.LayoutParams)textView1.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
textView1.setLayoutParams(layoutParams);
Karthikeyan
quelle
24

Verwendung in der XML-Datei.

Layoutdatei

<TextView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:text="@string/stringtext"/>

oder:

Verwenden Sie dies innerhalb der Java-Klasse

TextView textView =(TextView)findViewById(R.id.texviewid);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
venu
quelle
21

Verwenden Sie dies für das relative Layout

android:layout_centerInParent="true"

und für anderes Layout

android:gravity="center" 

quelle
18

Wenn die TextView'sHöhe und Breite sind, wrap contentwird der Text innerhalb der TextViewimmer zentriert. Aber wenn die TextView'sBreite match_parentund Höhe ist match_parentoder wrap_contentdann müssen Sie den folgenden Code schreiben:

Für RelativeLayout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" 
        android:text="Hello World" />

</RelativeLayout>

Für LinearLayout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Hello World" />

</LinearLayout>
Avijit Karmakar
quelle
17

Während die Verwendung der Schwerkraft für TextView funktioniert, ist in API-Ebene 17 eine alternative Methode implementiert:

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Ich kenne den Unterschied nicht, aber es funktioniert auch. Jedoch nur für API Level 17 oder höher.

Anfänger
quelle
Der Unterschied wird hier beschrieben: stackoverflow.com/questions/16196444/…
jasdefer
Dadurch wird der Text in der Textansicht wirklich zentriert. Wenn Sie nur die Schwerkraft verwenden, gibt es je nach Text eine leichte Nachfüllung. Wenn Sie beispielsweise ein kleines Kreisabzeichen mit Text in der Mitte haben, können Sie einen sehr offensichtlichen Unterschied feststellen.
Tarrball
14

In RelativeLayoutwird es schön damit sein.

Und noch eine Buttonund alles andere, was Sie hinzufügen können.

Das Folgende funktioniert gut für mich.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ff314859"
    android:paddingLeft="16dp"
    android:paddingRight="16dp">
    <TextView 
        android:id="@+id/txt_logo"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="your text here"
        android:textSize="30dp"
        android:gravity="center"/>

        ...other button or anything else...

</RelativeLayout>
Yuda Prawira
quelle
11

Der einfachste Weg (der überraschenderweise nur in Kommentaren erwähnt wird, weshalb ich als Antwort poste) ist:

textview.setGravity(Gravity.CENTER)
user1
quelle
11

Sie können einfach die gravityIhrer Textansicht in einstellen CENTER.

note-knotz
quelle
10

Wenn Sie versuchen, Text in einem TableLayout auf einer TableRow zu zentrieren, habe ich Folgendes erreicht:

<TableRow android:id="@+id/rowName"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:padding="5dip" >
    <TextView android:id="@+id/lblSomeLabel"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center"
              android:layout_width="0dp"
              android:layout_weight="100"
              android:text="Your Text Here" />
</TableRow>
Legasthenikeraboko
quelle
10

Verwenden android:textAlignment="center"

       <TextView
        android:text="HOW WAS\nYOUR\nDAY?"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:id="@+id/textView5"
         />
Chathura Wijesinghe
quelle
textAlignment = "center" erledigt den Job erst, wenn die TextView die Dimensionen match_parent hat
SAurabh
Das obige Beispiel von @SAurabh funktioniert ohne Probleme.
Chathura Wijesinghe
Funktioniert es ohne Schwerkraft für die Eltern- oder Layout-Schwerkraft an sich? Die Textausrichtung richtet den Text nicht innerhalb seiner Ansichtsgrenzen aus. Bis die textView in diesem Fall match_parent annimmt, sieht es ohne Schwerkraft im übergeordneten Layout oder layout_gravity an sich nicht so aus
SAurabh
9

Hier ist meine Antwort, die ich in meiner App verwendet hatte. Es zeigt Text in der Mitte des Bildschirms.

<TextView
    android:id="@+id/txtSubject"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/subject"
    android:layout_margin="10dp"
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge" />
Md. Naushad Alam
quelle
9

Wenn Sie das relative Layout verwenden:

  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stringname"
    android:layout_centerInParent="true"/>

Wenn Sie LinearLayout verwenden

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stringname"
    android:layout_gravity="center"/>
Niranjan
quelle
8

Wie viele Antworten oben vermuten lassen, funktioniert das einwandfrei.

android:gravity="center"

Wenn Sie es nur vertikal zentrieren möchten:

android:gravity="center_vertical"

oder nur horizontal:

android:gravity="center_horizontal"
rgamber
quelle
7

Stellen Sie in Ihrer XML-Datei einfach die Schwerkraft der Textansicht auf Mitte ein:

<TextView
    android:gravity="center" />
Mansoor Ahmad Samar
quelle
7

Sie können dies tun, um den Text zu zentrieren

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />
Kamlakar Kate
quelle
7

Die Höhe und Breite der Textansicht sind Umbruchinhalte. Der Text in der Textansicht wird immer zentriert. Machen Sie dann die Mitte im übergeordneten Layout, indem Sie Folgendes verwenden:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Hello.."/>
</RelativeLayout>

Für LinearLayout ist auch der Code derselbe:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello.."/>
</LinearLayout>

und pro-grammatisch übergeordnet ist RelativeLayout Java-Code. Verwenden Sie zur Laufzeit so etwas in Ihrer Aktivität

TextView textView1 =(TextView)findViewById(R.id.texView1);
RelativeLayout.LayoutParams layoutParams = RelativeLayout.LayoutParams)textView1.getLayoutParams();
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
textView1.setLayoutParams(layoutParams);
Attif
quelle
6

Wir können dies auf verschiedene Arten erreichen:

XML-Methode 01

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:gravity="center_vertical|center_horizontal"
    android:text="@strings/text"
/>

XML-Methode 02

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@strings/text"
/>

XML-Methode 03

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:gravity="center"
    android:text="@strings/text"
/>

XML-Methode 04

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:layout_centerInParent="true"
    android:text="@strings/text"
/>

Java-Methode 01

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);

Java-Methode 02

textview.setGravity(Gravity.CENTER);

Java-Methode 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
ArghadipDasCEO
quelle
6

Die Schwerkraft von TextView funktioniert gemäß Ihrem übergeordneten Layout.

LinearLayout :

Wenn Sie LinearLayout verwenden, finden Sie zwei Schwerkraftattribute android: Schwerkraft & android: layout_gravity

android: Schwerkraft: stellt den Layouttrank des internen Textes von TextView dar, während android: layout_gravity: die Position von TextView in der übergeordneten Ansicht darstellt.

Geben Sie hier die Bildbeschreibung ein

Wenn Sie Text horizontal und vertikal zentrieren möchten, verwenden Sie diesen Code

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:background="@android:color/background_light"
    android:layout_height="300dp">

    <TextView
        android:layout_width="match_parent"
        android:text="Hello World!"
        android:gravity="center_horizontal"
        android:layout_gravity="center_vertical"
        android:layout_height="wrap_content"
    />
</LinearLayout>

RelativeLayout :

Mit RelativeLayout können Sie die folgende Eigenschaft in TextView verwenden

Android: Schwerkraft = "Zentrum" für Textzentrum in TextView.

android :vity = "center_horizontal" innerer Text, wenn Sie horizontal zentriert sein möchten.

android :vity = "center_vertical" innerer Text, wenn Sie vertikal zentriert werden möchten.

android: layout_centerInParent = "true", wenn TextView in der Mittelposition der übergeordneten Ansicht angezeigt werden soll. android: layout_centerHorizontal = "true", wenn TextView horizontal in der Mitte der übergeordneten Ansicht angezeigt werden soll. android: layout_centerVertical = "true", wenn TextView vertikal in der Mitte der übergeordneten Ansicht angezeigt werden soll.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="300dp"
    android:background="@android:color/background_light"
    android:layout_height="300dp">

    <TextView
        android:layout_width="match_parent"
        android:text="Hello World!"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:layout_height="wrap_content"
    />
</RelativeLayout>
Alpesh Sorathiya
quelle
Übrigens, haben Sie aus irgendeinem Grund einen Rollback auf die vorherige Revision durchgeführt? Die von Ihnen zurückgesetzte Revision ist eine bewährte Methode, damit Texteditoren, wie vom Editor erwähnt, bei der Codierung helfen können.
Edric
5

Versuchen Sie es auf diese Weise, es wird funktionieren

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center_horizontal|center_vertical">

                    <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAlignment="center"
                    />

            </LinearLayout>
Gemeinschaft
quelle
5

Eigentlich können wir es besser machen, indem wir fontPadding ausschließen.

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Seanghay
quelle