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

¿Cómo centro el texto horizontal y verticalmente en un TextView, de modo que aparezca exactamente en el medio del TextView in Android?

preguntado el 10 de enero de 09 a las 22:01

establezca layout_width y layout_height en fill_parent, luego establezca la gravedad en el centro. Eso hará el truco

fill_parent ahora está en desuso, así que use MATCH_PARENT en layout_width y layout_height y establezca la gravedad de TextView en el centro. -

30 Respuestas

Supongo que estás usando un diseño XML.

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

También puedes usar la gravedad. center_vertical or center_horizontal de acuerdo a tu necesidad

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

Respondido 10 Jul 18, 17:07

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

@Rob, si el ancho y el alto son wrap_content, entonces técnicamente, el texto ya está centrado. - JoJo

¿Si quiero alinear TextView en relación con otra vista, pero es texto centrado en sí mismo? - usuario517491

Esto no me está funcionandoandroid:gravity="center"). Todavía se muestra en el extremo izquierdo de la pantalla. :( - nombre de usuario hahahaahahaha

No debe confundirse con el android:layout_gravity="center", que hace otra cosa. - Rudi Kershaw

android:gravity="center" 

Esto hará el truco

respondido 22 mar '15, 14:03

La vista de texto tiene que ser match_parent o fill_parent para que esto funcione. Si su contenido envuelve, entonces no se centrará. - kael wade

@KalelWade: centrar el 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 principal, en cuyo caso, simplemente coloque esta línea en la vista principal. - Pato morando

@Mooing Duck Por lo tanto, la razón para no usar contenido envolvente, no tiene sentido. Pero cuando está haciendo frente y pegando o simplemente apresurándose, es posible que no sume dos y dos. Por eso lo mencioné. - kael wade

si TextView con ancho y alto igual a "wrap_content" está dentro de LinearLayout con ancho y alto "match_parent", entonces necesita establecer el layout_gravity de Linear_layout. - faisal naseer

@MooingDuck, cuando la altura es "wrap_content" y la gravedad es "center_vertical", dibuja en Design (vista previa) como centrado, pero en un dispositivo se coloca en la parte superior. Así que haga que la altura sea "match_parent" y establezca la gravedad en "center_vertical" o "center". - CoolMind

También puede configurarlo dinámicamente usando:

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

respondido 21 nov., 09:12

O simplemente textview.setGravity (Gravity.CENTER); - Amplificar91

¿Cuáles son los criterios de juicio para decidir qué camino elegir, escribir en xml o escribir en un archivo Java? - Kenju

@Kenju si desea que sea fácilmente editable y el valor no cambie 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), solo puede hacerlo a través de Java. - gustavo maciel

@GustavoMaciel entonces, básicamente xml a menos que necesite ser modificado dinámicamente ... Ahora lo tengo. ¡Gracias por tu sencilla y útil respuesta! - Kenju

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.

respondido 11 nov., 11:03

Esto centra el TextView, no el texto en él. - antropomo

Esto NO funciona cuando hay un ajuste de palabras en el TextView. El texto será de ancho completo y de varias líneas 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 manperla

También puedes usar la combinación:

android:gravity="left|center"

Entonces, si el ancho de la vista de texto es mayor que "fill_parent", el texto aún estará alineado a la izquierda (no centrado como con la gravedad establecida solo en "center").

Respondido 26 Jul 13, 09:07

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

Respondido 17 Feb 15, 11:02

Hay dos formas de hacer esto.

El primero en el código XML. Debes prestar atención al Gravity Atributo. 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 gravedad serán:

center_vertical|center_horizontal

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

Respondido el 27 de Septiembre de 16 a las 14:09

Si está utilizando TableLayout, asegúrese de establecer también la gravedad de TableRows en el centro. De lo contrario, no funcionará. Al menos no funcionó conmigo hasta que puse 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>

contestado el 13 de mayo de 14 a las 05:05

Interesante. También debe verificar si eso es válido para LinearLayout (el padre TableRow). - Martin

Necesitas configurar Gravedad de TextView (Centro horizontal y centro vertical) así:

android:layout_centerHorizontal="true"   

y

android:layout_centerVertical="true"

Y usando dinámicamente:

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

contestado el 13 de mayo de 14 a las 05:05

La semántica del código es incorrecta. Reemplazar layout_centerhorizontal y layout_centervertical by layout_centerHorizontal y layout_centerVertical ("H" y "V" en mayúsculas, de lo contrario no funcionará). - yugidroid

layout_ * le dice al padre de la Vista dónde quiere estar. Sin layout_ * le dice a la Vista cómo colocar sus componentes - dandre allison

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 el texto.

Respondido el 12 de enero de 13 a las 04:01

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

Respondido el 19 de enero de 16 a las 06:01

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

Use esto dentro de la clase Java

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

contestado el 13 de mayo de 14 a las 05:05

Use esto para el diseño relativo

android:layout_centerInParent="true"

y para otro diseño

android:gravity="center" 

Respondido 11 Oct 13, 12:10

Si TextView's la altura y el ancho son wrap content luego el texto dentro del TextView estar siempre centrado. Pero si el TextView's el ancho es match_parent y la altura es match_parent or wrap_content entonces tienes que escribir el siguiente código:

Para Disposición relativa:

<?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 Diseño lineal:

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

Respondido el 12 de enero de 19 a las 15:01

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

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

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

Respondido 24 ago 13, 21:08

La diferencia se describe aquí: stackoverflow.com/questions/16196444/… - jasdefer

Esto realmente centrará el texto en TextView. Si solo usa la gravedad, hay un poco de relleno al final dependiendo de cuál sea el texto ... Si tiene una pequeña insignia circular con texto en el centro, por ejemplo, puede ver una diferencia muy obvia. - bola de alquitrán

In RelativeLayout, será bueno con eso.

Y otro Button y cualquier otra cosa que puedas 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>

Respondido 20 Abr '15, 16:04

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

textview.setGravity(Gravity.CENTER)

Respondido el 15 de diciembre de 15 a las 12:12

Puede configurar el gravity de su vista de texto en CENTER.

Respondido el 27 de Septiembre de 16 a las 14:09

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

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

Respondido 15 Jul 12, 03:07

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

Respondido el 05 de junio de 19 a las 02:06

textAlignment = "center" no hará el trabajo hasta que TextView tenga dimensiones que coincidan con_parent - SAurabh

El ejemplo anterior de @SAurabh funciona sin problemas. - Chathura Wijesinghe

¿Funciona sin gravedad para el padre o el diseño de la gravedad en sí mismo? No lo hará.La alineación del texto alineará el texto dentro de sus límites de 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

Aquí está la respuesta que usé 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" />

contestado el 13 de mayo de 14 a las 05:05

Si está utilizando el 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"/>

respondido 15 nov., 15:06

Como sugieren muchas respuestas, funciona bien.

android:gravity="center"

Si desea centrarlo solo verticalmente:

android:gravity="center_vertical"

o simplemente horizontalmente:

android:gravity="center_horizontal"

Respondido 04 Jul 13, 21:07

En realidad, podemos hacerlo mejor si excluimos fontPadding.

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

Respondido 13 Feb 20, 07:02

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

<TextView
    android:gravity="center" />

contestado el 13 de mayo de 14 a las 05:05

Puede hacer esto para centrar el texto

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

Respondido el 30 de junio de 17 a las 10:06

La altura y el ancho de TextView son contenido envolvente, luego el texto dentro de la vista de texto siempre estará centrado, luego haga el centro en su diseño principal 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>

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

Respondido el 09 de enero de 19 a las 21:01

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 de Java 01

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

Método de Java 02

textview.setGravity(Gravity.CENTER);

Método de Java 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Respondido el 14 de junio de 18 a las 11:06

La gravedad de TextView funciona según su 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.

enter image description here

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>

Disposición relativa:

Usando RelativeLayout puede usar la siguiente propiedad en TextView

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

android: gravity = "center_horizontal" texto interior si quieres centrado horizontalmente.

android: gravity = "center_vertical" texto interno si lo 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>

Respondido el 11 de enero de 19 a las 13:01

Por cierto, ¿alguna razón por la que retrocedió a la revisión anterior? La revisión que revertiste es una buena práctica para que, como lo mencionó el editor, pueda ayudar a los editores de texto con la codificación. - Edric

Prueba de esta manera, funcionará

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:gravity="center">
              
                    <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAlignment="center"
                    />

            </LinearLayout>

respondido 05 nov., 20:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.