¿Cómo centro el texto horizontal y verticalmente en un TextView?

2027

¿Cómo puedo centrar el texto en horizontal y en vertical en una TextView, de modo que parece exactamente a la mitad de la TextViewde Android?

pupeno
fuente
77
establezca tanto layout_width como layout_height en fill_parent, luego establezca la gravedad en el centro. Eso hará el truco
Amila
2
fill_parent ahora está en desuso, así que use MATCH_PARENT en layout_width y layout_height y configure la gravedad de TextView en el centro.
Bilal Ahmad

Respuestas:

3086

Supongo que está utilizando el diseño XML.

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

También puede usar la gravedad center_verticalo center_horizontalsegún su necesidad.

y como @stealthcopter comentó en Java: .setGravity(Gravity.CENTER);

Cuenta
fuente
58
Esto no funciona cuando se usa con un RelativeLayout donde la altura y el ancho del diseño están configurados en wrap_content
Rob
96
@Rob, si el ancho y el alto son wrap_content, entonces técnicamente, el texto ya está centrado.
JoJo
3
Si quiero alinear TextView en relación con otra vista, pero ¿es el texto centrado en sí mismo?
99
Esto no está funcionando para mí ( android:gravity="center"). Todavía se muestra en el extremo izquierdo de la pantalla. :(
uSeRnAmEhAhAhAhAhA
30
No debe confundirse con lo android:layout_gravity="center"que hace otra cosa.
Rudi Kershaw
445
android:gravity="center" 

Esto hará el truco

Vaquero
fuente
32
La vista de texto debe ser match_parent o fill_parent para que esto funcione. Si su contenido de envoltura, entonces no se centrará.
Kalel Wade
77
@KalelWade: centrar texto en una vista de texto con wrap_content no tiene ningún sentido. Tal vez esté pensando en centrar una vista de texto en una vista primaria, en cuyo caso, simplemente coloca esta línea en la vista principal.
Mooing Duck
@Mooing Duck Por lo tanto, la razón para no usar contenido de envoltura, no tiene sentido. Pero cuando estás haciendo frente y pegando o simplemente corriendo, no puedes juntar dos y dos. Por eso lo mencioné.
Kalel Wade
1
si TextView con ancho y alto igual a "wrap_content" está dentro de LinearLayout con ancho y alto "match_parent", entonces necesita establecer la layout_gravity de Linear_layout.
Faisal Naseer
1
@MooingDuck, cuando la altura es "wrap_content" y la gravedad es "center_vertical", se dibuja en Design (vista previa) como centrado, pero en un dispositivo se coloca en la parte superior. Por lo tanto, haga la altura "match_parent" y establezca la gravedad en "center_vertical" o "center".
CoolMind
297

También puede configurarlo dinámicamente usando:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
zeevb
fuente
141
O simplemente textview.setGravity (Gravity.CENTER);
Amplify91
¿Cuál es el criterio de juicio para decidir qué forma elegir, escribir en xml o escribir en un archivo Java?
kenju
2
@Kenju si desea que sea fácilmente editable y el valor no cambiará durante el tiempo de ejecución: XML. Si debe cambiar el valor en tiempo real (por ejemplo, cambiar la alineación cuando el usuario presiona un botón), entonces solo puede hacerlo a través de Java.
Gustavo Maciel
2
@GustavoMaciel entonces, básicamente xml a menos que necesite ser modificado dinámicamente ... Ahora lo tengo. ¡Gracias por su respuesta simple y útil!
kenju
115
android:layout_centerInParent="true"

Esto funciona cuando se usa con un RelativeLayout donde la altura y el ancho del diseño se establecen en wrap_content.

itherese
fuente
19
Esto centra TextView, no el texto que contiene.
anthropomo
2
Esto NO funciona cuando hay un ajuste de línea en TextView. El texto será de ancho completo y multilínea Y se justificará a la IZQUIERDA dentro del TextView. Aparecerá justificado a la izquierda en la pantalla. Debe usar "gravedad" como se especifica en las otras respuestas.
David Manpearl
83

También puedes usar la combinación:

android:gravity="left|center"

Luego, si el ancho de la vista de texto es mayor que "fill_parent", el texto seguirá alineado a la izquierda (no centrado como con la gravedad establecida solo en "centro").

Szorstki
fuente
56

Aplicar gravedad:

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

Para 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
fuente
42

Hay dos formas de hacer esto.

El primero en el código XML. Debe prestar atención al Gravityatributo. También puede encontrar este atributo en el Editor gráfico; puede ser más fácil que el EDITOR XML.

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

Para su escenario específico, los valores de la gravedad serán:

center_vertical|center_horizontal

En el editor gráfico encontrará todos los valores posibles, incluso verá sus resultados.

Cristiano Guerra
fuente
41

Si está utilizando TableLayout, asegúrese de establecer la gravedad de TableRows en el centro también. De lo contrario, no funcionará. Al menos no funcionó conmigo hasta que configuré la gravedad de TableRow en el centro.

Por ejemplo, así:

<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
fuente
Interesante. También debe verificar si eso es válido para LinearLayout (el padre TableRow).
Martin
38

Debe configurar TextView Gravity (Centro horizontal y Centro vertical) de esta manera:

android:layout_centerHorizontal="true"   

y

android:layout_centerVertical="true"

Y utilizando dinámicamente:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
NagarjunaReddy
fuente
La semántica del código está mal. Reemplace layout_centerhorizontaly layout_centerverticalpor layout_centerHorizontaly layout_centerVertical("H" y "V" en mayúsculas, de lo contrario no funcionará).
yugidroid
2
layout_ * le dice al padre de la Vista dónde quiere estar. Sin diseño_ * le dice a la Vista cómo colocar sus componentes
Dandre Allison
34

En mi opinión,

android:gravity="center"

es mejor que,

android:layout_centerInParent="true"

que es mejor que

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

al menos para formatear texto.

epicness42
fuente
30

Para diseño lineal: en XML use algo como esto

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

Para hacer esto en tiempo de ejecución, use algo como esto en su actividad

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

Para diseño relativo: en XML use algo como esto

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

Para hacer esto en tiempo de ejecución, use algo como esto en su actividad

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

Usar en el archivo XML.

Archivo de diseño

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

o:

Use esto dentro de la clase Java

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

Use esto para un diseño relativo

android:layout_centerInParent="true"

y para otro diseño

android:gravity="center" 

fuente
18

Si la TextView'saltura y el ancho son wrap contententonces el texto dentro de TextViewsiempre estará centrado. Pero si el TextView'sancho es match_parenty la altura es match_parentowrap_content entonces tienes que escribir el siguiente código:

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

Para 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
fuente
17

Si bien el uso de la gravedad funciona para TextView, hay un método alternativo implementado en el nivel 17 de API:

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

No sé la diferencia, pero también funciona. Sin embargo, solo para API nivel 17 o superior.

novato
fuente
La diferencia se describe aquí: stackoverflow.com/questions/16196444/…
jasdefer
Esto realmente centrará el texto en TextView. Si solo usas la gravedad, hay un poco de relleno final dependiendo de cuál sea el texto ... Si tienes una pequeña insignia circular con texto en el centro, por ejemplo, puedes ver una diferencia muy obvia.
tarrball
14

En RelativeLayout, será agradable con eso.

Y otro Buttony cualquier otra cosa que pueda agregar.

Lo siguiente funciona muy bien para mí.

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

La forma más fácil (que sorprendentemente solo se menciona en los comentarios, por eso publico como respuesta) es:

textview.setGravity(Gravity.CENTER)
usuario1
fuente
11

Simplemente puede configurar el gravityde su vista de texto en CENTER.

nota-knotz
fuente
10

Si está tratando de centrar el texto en un TableRow en un TableLayout, así es como lo conseguí:

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

Utilizar 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
fuente
textAlignment = "center" no hará el trabajo hasta que TextView tenga dimensiones para emparejar_parent
SAurabh
El ejemplo anterior de @SAurabh funciona sin problemas.
Chathura Wijesinghe
¿Funciona sin gravedad para la matriz o la gravedad del diseño en sí mismo? No lo hará La alineación del texto alineará el texto dentro de los límites de su vista, por lo que hasta que textView tome match_parent en este caso, no parecerá así sin gravedad en su diseño principal o layout_gravity en sí mismo
SAurabh
9

Aquí está mi respuesta que había usado en mi aplicación. Muestra texto en el centro de la pantalla.

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

Si está utilizando diseño relativo:

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

Si está utilizando LinearLayout

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

Como muchas respuestas sugieren anteriormente, funciona bien.

android:gravity="center"

Si desea centrarlo solo verticalmente:

android:gravity="center_vertical"

o solo horizontalmente:

android:gravity="center_horizontal"
rgamber
fuente
7

Simplemente, en su archivo XML, configure la gravedad de la vista de texto en el centro:

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

Puedes hacer esto para centrar el texto

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

La altura y el ancho de TextView son contenido de ajuste, luego el texto dentro de la vista de texto siempre estará centrado, luego se centrará en su diseño principal mediante el uso de:

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

Para LinearLayout también el código es el mismo:

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

y programáticamente padre es el código Java RelativeLayout esto en tiempo de ejecución usa algo como esto en tu actividad

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);
Atif
fuente
6

Podemos lograr esto con estas múltiples formas: -

Método 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étodo 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étodo 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étodo 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étodo Java 01

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

Método Java 02

textview.setGravity(Gravity.CENTER);

Método Java 03

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

La gravedad de TextView funciona según el diseño principal.

Diseño lineal :

Si usa LinearLayout, encontrará dos atributos de gravedad android: gravity y android: layout_gravity

android: gravity: representa la poción de diseño del texto interno de TextView mientras que android: layout_gravity: representa la posición de TextView en la vista principal.

ingrese la descripción de la imagen aquí

Si desea establecer el texto horizontal y verticalmente en el centro, use el siguiente código

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

Diseño relativo :

Usando RelativeLayout puede usar la siguiente propiedad en TextView

android: gravity = "center" para el centro de texto en TextView.

android: gravity = "center_horizontal" texto interno si desea centrado horizontalmente.

android: gravity = "center_vertical" texto interno si desea centrado verticalmente.

android: layout_centerInParent = "true" si desea TextView en la posición central de la vista principal. android: layout_centerHorizontal = "true" si desea TextView en el centro horizontal de la vista principal. android: layout_centerVertical = "true" si desea TextView en el centro vertical de la vista principal.

<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
fuente
Por cierto, ¿alguna razón por la que retrocediste a la revisión anterior? La revisión que revierte es una buena práctica para que, como lo ha mencionado el editor, pueda ayudar a los editores de texto con la codificación.
Edric
5

Intenta de esta manera, funcionará

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

En realidad, podemos hacerlo mejor excluyendo fontPadding.

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