Comment centrer du texte horizontalement et verticalement dans une TextView?

2028

Comment centrer le texte horizontalement et verticalement dans un TextView, afin qu'il apparaisse exactement au milieu du TextViewin Android?

pupeno
la source
7
définissez layout_width et layout_height sur fill_parent, puis définissez la gravité sur center. Ça fera l'affaire
Amila
2
fill_parent est désormais obsolète, utilisez MATCH_PARENT dans layout_width et layout_height et réglez la gravité de TextView au centre.
Bilal Ahmad

Réponses:

3086

Je suppose que vous utilisez une disposition XML.

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

Vous pouvez également utiliser la gravité center_verticalou center_horizontalselon vos besoins.

et comme l'a commenté @stealthcopter en java: .setGravity(Gravity.CENTER);

Facture
la source
58
Cela ne fonctionne pas lorsqu'il est utilisé avec un RelativeLayout où la hauteur et la largeur de la disposition sont définies sur wrap_content
Rob
96
@Rob, si la largeur et la hauteur sont wrap_content, alors techniquement, le texte est déjà centré.
JoJo
3
Si je veux aligner TextView par rapport à une autre vue, mais que le texte est centré en lui-même?
9
Cela ne fonctionne pas pour moi ( android:gravity="center"). Il apparaît toujours à l'extrême gauche de l'écran. :(
uSeRnAmEhAhAhAhAhA
30
À ne pas confondre avec android:layout_gravity="center", ce qui fait autre chose.
Rudi Kershaw
445
android:gravity="center" 

Ça fera l'affaire

Jean
la source
32
La vue textuelle doit être match_parent ou fill_parent pour que cela fonctionne. Si son contenu est enveloppé, il ne sera pas centré.
Kalel Wade
7
@KalelWade: centrer du texte dans une vue textuelle avec wrap_content n'a aucun sens. Vous envisagez peut-être de centrer une vue de texte dans une vue parent, auquel cas, vous mettez simplement cette ligne dans le parent.
Mooing Duck
@Mooing Duck Ainsi, la raison de ne pas utiliser de contenu enveloppant - cela n'a pas de sens. Mais lorsque vous copiez et collez ou que vous vous précipitez, vous ne pouvez pas mettre deux et deux ensemble. C'est pourquoi je l'ai mentionné.
Kalel Wade
1
si TextView avec une largeur et une hauteur égales à "wrap_content" est à l'intérieur de LinearLayout avec une largeur et une hauteur "match_parent", vous devez définir la disposition_gravité de Linear_layout.
Faisal Naseer
1
@MooingDuck, lorsque la hauteur est "wrap_content" et la gravité "center_vertical", il dessine dans Design (aperçu) comme centré, mais dans un appareil, il est positionné en haut. Définissez donc la hauteur "match_parent" et réglez la gravité sur "center_vertical" ou "center".
CoolMind
298

Vous pouvez également le configurer dynamiquement en utilisant:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Zeevb
la source
142
Ou tout simplement textview.setGravity (Gravity.CENTER);
Amplify91
Quels sont les critères de jugement pour décider de la façon de choisir, d'écrire en XML ou d'écrire en fichier Java?
kenju
2
@Kenju si vous voulez qu'il soit facilement modifiable et que la valeur ne changera pas pendant l'exécution: XML. Si vous devez modifier la valeur en temps réel (par exemple, modifier l'alignement lorsque l'utilisateur appuie sur un bouton), vous ne pouvez le faire que via Java.
Gustavo Maciel
2
@ GustavoMaciel donc, fondamentalement xml à moins qu'il doive être modifié dynamiquement ... Maintenant je l'ai. Merci pour votre réponse simple et utile!
kenju
115
android:layout_centerInParent="true"

Cela fonctionne lorsqu'il est utilisé avec un RelativeLayout où la hauteur et la largeur de la disposition sont définies sur wrap_content.

eseese
la source
19
Cela centre le TextView, pas le texte qu'il contient.
anthropomo
2
Cela ne fonctionne PAS lorsqu'il y a un retour automatique à la ligne dans le TextView. Le texte sera pleine largeur et multiligne ET justifié à gauche dans le TextView. Il apparaîtra justifié à gauche sur l'écran. Vous devez utiliser la "gravité" comme spécifié dans les autres réponses.
David Manpearl
83

Vous pouvez également utiliser la combinaison:

android:gravity="left|center"

Ensuite, si la largeur de la vue de texte est supérieure à "fill_parent", le texte sera toujours aligné à gauche (non centré comme avec la gravité réglée uniquement sur "center").

Szorstki
la source
56

Appliquer la gravité:

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

Pour vertical:

txtView.setGravity(Gravity.CENTER_VERTICAL);

En XML:

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

Il y a deux façons de le faire.

Le premier du code XML. Vous devez faire attention à l' Gravityattribut. Vous pouvez également trouver cet attribut dans l'éditeur graphique; il peut être plus facile que l'EDITEUR XML.

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

Pour votre scénario spécifique, les valeurs de gravité seront:

center_vertical|center_horizontal

Dans l'éditeur graphique, vous trouverez toutes les valeurs possibles, voir même leurs résultats.

Cristiano Guerra
la source
41

Si vous utilisez TableLayout, assurez-vous également de régler la gravité des TableRows au centre. Sinon, cela ne fonctionnera pas. Au moins, cela n'a pas fonctionné avec moi tant que je n'ai pas réglé la gravité du TableRow au centre.

Par exemple, comme ceci:

<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
la source
Intéressant. Vous devez également vérifier si cela est valable pour LinearLayout (le parent TableRow).
Martin
38

Vous devez définir TextView Gravity (Center Horizontal & Center Vertical) comme ceci:

android:layout_centerHorizontal="true"   

et

android:layout_centerVertical="true"

Et en utilisant dynamiquement:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
NagarjunaReddy
la source
La sémantique du code est incorrecte. Remplacez layout_centerhorizontalet layout_centerverticalpar layout_centerHorizontalet layout_centerVertical("H" et "V" en majuscules, sinon cela ne fonctionnera pas).
yugidroid
2
layout_ * indique au parent de la vue où il veut être. Sans layout_ * indique à la vue comment placer ses composants
Dandre Allison
34

À mon avis,

android:gravity="center"

est mieux que,

android:layout_centerInParent="true"

ce qui est mieux que,

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

au moins pour la mise en forme du texte.

epicness42
la source
30

Pour la mise en page linéaire: en XML, utilisez quelque chose comme ceci

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

Pour ce faire au moment de l'exécution, utilisez quelque chose comme ça dans votre activité

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

Pour la mise en page relative: en XML, utilisez quelque chose comme ça

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

Pour ce faire au moment de l'exécution, utilisez quelque chose comme ça dans votre activité

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
la source
24

Utiliser dans le fichier XML.

Fichier de mise en page

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

ou:

Utilisez-le dans la classe Java

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

Utilisez ceci pour une disposition relative

android:layout_centerInParent="true"

et pour une autre mise en page

android:gravity="center" 

la source
18

Si la TextView'shauteur et la largeur sont wrap contentalors le texte dans le TextViewtoujours être centré. Mais si la TextView'slargeur est match_parentet la hauteur est match_parentou wrap_contentalors vous devez écrire le code ci-dessous:

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

Pour 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
la source
17

Tout en utilisant la gravité fonctionne pour TextView, il existe une autre méthode implémentée dans le niveau 17 de l'API -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Je ne connais pas la différence, mais ça marche aussi. Cependant uniquement pour le niveau d'API 17 ou supérieur.

Noob
la source
La différence est décrite ici: stackoverflow.com/questions/16196444/…
jasdefer
Cela va vraiment centrer le texte dans TextView. Si vous utilisez simplement la gravité, il y a un peu de remplissage en fonction de ce qu'est le texte ... Si vous avez un petit badge cercle avec du texte au centre, par exemple, vous pouvez voir une différence très évidente.
tarrball
14

En RelativeLayout, ce sera sympa avec ça.

Et un autre Buttonet tout ce que vous pouvez ajouter.

Ce qui suit fonctionne bien pour moi.

<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
la source
11

Le moyen le plus simple (qui n'est étonnamment mentionné que dans les commentaires, d'où la raison pour laquelle je poste en réponse) est:

textview.setGravity(Gravity.CENTER)
user1
la source
11

Vous pouvez simplement définir le gravityde votre affichage de texte dans CENTER.

note-knotz
la source
10

Si vous essayez de centrer du texte sur un TableRow dans un TableLayout, voici comment j'ai réalisé ceci:

<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>
dyslexicanaboko
la source
10

Utilisation 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
la source
textAlignment = "center" ne fera pas le travail tant que TextView n'aura pas les dimensions pour match_parent
SAurabh
L'exemple @SAurabh ci-dessus fonctionne sans aucun problème.
Chathura Wijesinghe
fonctionne-t-il sans gravité par rapport à la gravité parent ou mise en page en soi? Il ne sera pas aligné sur le texte alignera le texte dans ses limites de vue, donc jusqu'à ce que textView prenne match_parent dans ce cas, il ne ressemblera pas à cela sans gravité dans sa disposition parent ou layout_gravity en lui
SAurabh
9

Voici ma réponse que j'avais utilisée dans mon application. Il affiche du texte au centre de l'écran.

<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
la source
9

Si vous utilisez la mise en page relative:

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

Si vous utilisez LinearLayout

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

Comme de nombreuses réponses le suggèrent ci-dessus, cela fonctionne très bien.

android:gravity="center"

Si vous souhaitez le centrer juste verticalement:

android:gravity="center_vertical"

ou simplement horizontalement:

android:gravity="center_horizontal"
rgamber
la source
7

Simplement, dans votre fichier XML, réglez la gravité textview au centre:

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

Vous pouvez faire comme ça pour centrer le texte

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

La hauteur et la largeur du TextView sont un contenu enveloppé, puis le texte dans le texte est toujours centré, puis centre dans sa disposition parent en utilisant:

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

Pour LinearLayout, le code est également le même:

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

et pro-grammaticalement parent est le code java RelativeLayout au moment de l'exécution utiliser quelque chose comme ça dans votre activité

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
la source
6

Nous pouvons y parvenir avec ces multiples façons: -

Méthode 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"
/>

Méthode 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"
/>

Méthode XML 03

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

Méthode 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"
/>

Méthode Java 01

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

Méthode Java 02

textview.setGravity(Gravity.CENTER);

Méthode Java 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
ArghadipDasCEO
la source
6

La gravité TextView fonctionne selon la disposition de votre parent.

Disposition linéaire :

Si vous utilisez LinearLayout, vous trouverez deux attributs de gravité android: gravity et android: layout_gravity

android: gravity: représente la potion de mise en page du texte interne de TextView tandis que android: layout_gravity: représente la position de TextView dans la vue parent.

entrez la description de l'image ici

Si vous souhaitez définir le texte horizontalement et verticalement au centre, utilisez le code ci-dessous

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

En utilisant RelativeLayout, vous pouvez utiliser la propriété ci-dessous dans TextView

android: gravity = "center" pour le centre de texte dans TextView.

android: gravity = "center_horizontal" texte intérieur si vous voulez centré horizontalement.

android: gravity = "center_vertical" texte intérieur si vous voulez centré verticalement.

android: layout_centerInParent = "true" si vous voulez que TextView soit au centre de la vue parent. android: layout_centerHorizontal = "true" si vous voulez que TextView soit au centre horizontal de la vue parent. android: layout_centerVertical = "true" si vous voulez que TextView soit au centre vertical de la vue parent.

<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
la source
Btw, une raison pour laquelle vous êtes revenu à la révision précédente? La révision que vous avez annulée est une bonne pratique afin que ce que l'éditeur a mentionné puisse aider les éditeurs de texte à encoder.
Edric
5

Essayez de cette façon, cela fonctionnera

            <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>
Cunity
la source
5

En fait, nous pouvons faire mieux en excluant fontPadding.

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