Come posso centrare il testo in orizzontale e in verticale in un TextView?


2026

Come posso centrare il testo in orizzontale e verticale in a TextView, in modo che appaia esattamente nel mezzo di TextViewin Android?


7
imposta layout_width e layout_height su fill_parent, quindi imposta la gravità al centro. Questo farà il trucco
Amila,

2
fill_parent ora è deprecato, quindi utilizza MATCH_PARENT in layout_width e layout_height e imposta la gravità di TextView al centro.
Bilal Ahmad,

Risposte:


3086

Suppongo che tu stia utilizzando il layout XML.

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

Puoi anche usare la gravità center_verticalo center_horizontalsecondo le tue necessità.

e come ha commentato @stealthcopter in java: .setGravity(Gravity.CENTER);


58
Questo non funziona se utilizzato con un RelativeLayout in cui l'altezza e la larghezza del layout sono impostate su wrap_content
Rob,

96
@Rob, se larghezza e altezza sono wrap_content, quindi tecnicamente il testo è già centrato.
JoJo

3
Se voglio allineare TextView rispetto a un'altra vista, ma il testo è centrato in se stesso?

9
Questo non funziona per me ( android:gravity="center"). Mostra ancora all'estrema sinistra dello schermo. :(
uSeRnAmEhAhAhAhAhA

30
Da non confondere android:layout_gravity="center", che fa qualcos'altro.
Rudi Kershaw,

445
android:gravity="center" 

Questo farà il trucco


32
Per poter funzionare, la visualizzazione del testo deve essere match_parent o fill_parent. Se il suo contenuto è a capo, non sarà centrato.
Kalel Wade,

7
@KalelWade: centrare il testo in una visualizzazione di testo con wrap_content non ha alcun senso. Forse stai pensando di centrare una visualizzazione di testo in una vista padre, nel qual caso metti semplicemente questa linea nel padre.
Mooing Duck,

@Mooing Duck Quindi la ragione per non usare il contenuto avvolgente - non ha senso. Ma quando stai copiando e incollando o semplicemente correndo, potresti non mettere insieme due e due. Ecco perché l'ho menzionato.
Kalel Wade,

1
se TextView con larghezza e altezza uguali "wrap_content" è all'interno di LinearLayout con larghezza e altezza "match_parent", devi impostare layout_gravity di Linear_layout.
Faisal Naseer,

1
@MooingDuck, quando l'altezza è "wrap_content" e la gravità è "center_vertical", disegna in Design (anteprima) come centrato, ma in un dispositivo è posizionato in alto. Quindi fai altezza "match_parent" e imposta la gravità su "center_vertical" o "center".
CoolMind,

297

Puoi anche configurarlo in modo dinamico usando:

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

141
O semplicemente textview.setGravity (Gravity.CENTER);
Amplifica il

Quali sono i criteri di giudizio per decidere quale modo scegliere, scrivere in XML o scrivere in file Java?
Kenju,

2
@Kenju se vuoi che sia facilmente modificabile e il valore non cambierà durante il runtime: XML. Se è necessario modificare il valore in tempo reale (ad esempio, modificare l'allineamento quando l'utente preme un pulsante), è possibile farlo solo tramite Java.
Gustavo Maciel,

2
@GustavoMaciel così, fondamentalmente xml a meno che non debba essere modificato in modo dinamico ... Ora ho capito. Grazie per la tua risposta semplice e utile!
Kenju,

115
android:layout_centerInParent="true"

Funziona quando utilizzato con un RelativeLayout in cui l'altezza e la larghezza del layout sono impostate su wrap_content.


19
Questo centra il TextView, non il testo in esso.
anthropomo,

2
Questo NON funziona quando è presente una parola a capo TextView. Il testo sarà a tutta larghezza e multilinea E SINISTRA giustificato all'interno di TextView. Apparirà giustificato a sinistra sul display. Dovresti usare la "gravità" come specificato nelle altre risposte.
David Manpearl,

83

Puoi anche usare la combinazione:

android:gravity="left|center"

Quindi, se la larghezza della visualizzazione del testo è maggiore di "fill_parent", il testo verrà comunque allineato a sinistra (non centrato come se la gravità fosse impostata solo su "centro").


56

Applicare gravità:

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

Per verticale:

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

42

Ci sono due modi per farlo.

Il primo nel codice XML. Devi prestare attenzione Gravityall'attributo. È inoltre possibile trovare questo attributo nell'Editor grafico; potrebbe essere più semplice di XML EDITOR.

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

Per il tuo scenario specifico, i valori di gravità saranno:

center_vertical|center_horizontal

Nell'editor grafico troverai tutti i valori possibili, anche i loro risultati.


41

Se stai usando TableLayout assicurati di impostare anche la gravità di TableRows al centro. Altrimenti non funzionerà. Almeno non ha funzionato con me finché non ho impostato la gravità di TableRow al centro.

Ad esempio, in questo modo:

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

Interessante. Devi verificare se questo è valido anche per LinearLayout (il genitore TableRow).
Martin,

38

È necessario impostare TextView Gravity (Center Horizontal & Center Vertical) in questo modo:

android:layout_centerHorizontal="true"   

e

android:layout_centerVertical="true"

E usando dinamicamente:

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

La semantica del codice è errata. Sostituisci layout_centerhorizontale layout_centerverticalcon layout_centerHorizontale layout_centerVertical("H" e "V" in maiuscolo, altrimenti non funzionerà).
yugidroid,

2
layout_ * dice al genitore di View dove vuole essere. Without layout_ * dice a View come posizionare i suoi componenti
Dandre Allison l'

34

Secondo me,

android:gravity="center"

è meglio di,

android:layout_centerInParent="true"

che è meglio di

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

almeno per la formattazione del testo.


30

Per layout lineare: in XML usare qualcosa di simile

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

Per fare ciò in fase di esecuzione, utilizzare qualcosa di simile nella propria attività

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

Per il layout relativo: in XML usare qualcosa del genere

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

Per fare ciò in fase di esecuzione, utilizzare qualcosa di simile nella propria attività

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

24

Utilizzare nel file XML.

File di layout

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

o:

Usalo all'interno della classe Java

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

21

Usalo per il layout relativo

android:layout_centerInParent="true"

e per altri layout

android:gravity="center" 

18

Se l' TextView'saltezza e la larghezza sono wrap contentquindi il testo all'interno di TextViewessere sempre centrato. Ma se la TextView'slarghezza è match_parente l'altezza è match_parento wrap_contentallora devi scrivere il codice seguente:

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

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

17

Mentre l'utilizzo della gravità funziona per TextView, esiste un metodo alternativo implementato nel livello API 17 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Non conosco la differenza, ma funziona anche. Tuttavia, solo per livello API 17 o superiore.


La differenza è descritto qui: stackoverflow.com/questions/16196444/...
jasdefer

Questo centrerà veramente il testo in TextView. Se usi solo la gravità, c'è un po 'di imbottitura finale a seconda di quale sia il testo .... Se hai un piccolo distintivo circolare con il testo al centro, ad esempio, puoi vedere una differenza molto evidente.
Tarrball il

14

In RelativeLayout, sarà bello con esso.

E un altro Buttone qualsiasi altra cosa che puoi aggiungere.

Quanto segue funziona bene per me.

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

11

Il modo più semplice (che è sorprendentemente menzionato solo nei commenti, quindi perché sto postando come risposta) è:

textview.setGravity(Gravity.CENTER)

11

Puoi semplicemente impostare la gravitytua visualizzazione di testo in CENTER.


10

Se stai cercando di centrare il testo su un TableRow in un TableLayout, ecco come ho ottenuto questo risultato:

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

10

Uso 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"
         />

textAlignment = "center" non farà il lavoro fino a quando TextView non avrà dimensioni corrispondenti a match_parent
SAurabh,

@SAurabh sopra l'esempio funziona senza problemi.
Chathura Wijesinghe,

sta lavorando senza gravità per gravità genitore o layout in sé? L'allineamento del testo non allineerà il testo all'interno dei suoi limiti della vista, quindi fino a quando textView non avrà match_parent in questo caso, non sembrerà così senza gravità nel suo layout genitore o layout_gravity in sé
SAurabh

9

Ecco la mia risposta che avevo usato nella mia app. Mostra il testo al centro dello schermo.

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

9

Se si utilizza il layout relativo:

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

Se si utilizza LinearLayout

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

8

Come molte risposte suggeriscono sopra, funziona bene.

android:gravity="center"

Se vuoi centrarlo solo verticalmente:

android:gravity="center_vertical"

o solo in orizzontale:

android:gravity="center_horizontal"

7

Semplicemente, nel tuo file XML, imposta la gravità della vista di testo al centro:

<TextView
    android:gravity="center" />

7

Puoi fare così per centrare il testo

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />

7

L'altezza e la larghezza di TextView sono il contenuto a capo, quindi il testo all'interno della vista di testo deve essere sempre centrato, quindi centrare il layout principale usando:

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

Per LinearLayout anche il codice è lo stesso:

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

e il padre pro-grammaticalmente è il codice java RelativeLayout che in fase di esecuzione usa qualcosa di simile nella tua attività

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

6

Possiamo raggiungere questo obiettivo in questi modi multipli: -

Metodo XML 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"
/>

Metodo XML 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"
/>

Metodo XML 03

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

Metodo XML 04

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

Metodo Java 01

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

Metodo Java 02

textview.setGravity(Gravity.CENTER);

Metodo Java 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

6

La gravità di TextView funziona secondo il layout principale.

Disposizione lineare :

Se usi LinearLayout troverai due attributi di gravità android: gravity & android: layout_gravity

android: gravità: rappresenta la pozione di layout del testo interno di TextView mentre android: layout_gravity: rappresenta la posizione di TextView nella vista padre.

inserisci qui la descrizione dell'immagine

Se vuoi impostare il testo in orizzontale e in verticale al centro, usa questo codice sotto

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

Utilizzando RelativeLayout è possibile utilizzare la proprietà sottostante in TextView

android: gravity = "center" per text center in TextView.

android: gravity = testo interno "center_horizontal" se vuoi centrare orizzontalmente.

android: gravity = testo interno "center_vertical" se vuoi centrare verticalmente.

android: layout_centerInParent = "true" se vuoi TextView nella posizione centrale della vista padre. android: layout_centerHorizontal = "true" se si desidera TextView nel centro orizzontale della vista padre. android: layout_centerVertical = "true" se vuoi TextView nel centro verticale della vista padre.

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

A proposito, per quale motivo hai eseguito il rollback alla revisione precedente? La revisione che hai ripristinato è una buona pratica in modo che, come indicato dall'editor, possa aiutare gli editor di testo con la codifica.
Edric,

5

Prova in questo modo, funzionerà

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

5

In realtà, possiamo fare di meglio escludendo fontPadding.

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.