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


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


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


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

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.


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").


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

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.


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>

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

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.


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

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

21

Use esto para un diseño relativo

android:layout_centerInParent="true"

y para otro diseño

android:gravity="center" 

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>

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.


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>

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)

11

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


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>

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

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

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

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"

7

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

<TextView
    android:gravity="center" />

7

Puedes hacer esto para centrar el texto

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

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

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

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>

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>

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"
/>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.