¿Cómo centro el texto horizontal y verticalmente en un TextView?
Pregunta
¿Cómo puedo centrar el texto horizontal y verticalmente en un TextView
, para que aparezca exactamente en el medio del TextView
en Android
?
Solución
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_vertical
o center_horizontal
según sus necesidades.
y como comentó @stealthcopter
en java: .setGravity(Gravity.CENTER);
Otros consejos
android:gravity="center"
Esto hará el truco
También puede configurarlo dinámicamente usando:
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
android:layout_centerInParent="true"
Esto funciona cuando se usa con un RelativeLayout donde la altura del diseño & amp; ancho se establece en wrap_content.
También puede usar la combinación:
android:gravity="left|center"
Entonces, 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").
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"
/>
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>
Hay dos formas de hacer esto.
El primero en el código XML. Debe prestar atención al atributo Gravity
. 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á todos los valores posibles, incluso verá sus resultados.
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);
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.
Para diseño lineal: En XML usa 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);
Uso 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);
Use esto para el diseño relativo
android:layout_centerInParent="true"
y para otro diseño
android:gravity="center"
Mientras que el uso de la gravedad funciona para TextView, hay un método alternativo implementado en el nivel API 17 -
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
No sé la diferencia, pero también funciona. Sin embargo, solo para API nivel 17 o superior.
Si la altura y el ancho de TextView
son wrap content
, el texto dentro de TextView
siempre estará centrado. Pero si el ancho de TextView
es match_parent
y la altura es match_parent
o wrap_content
, entonces debe 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>
En RelativeLayout
, será agradable con él.
Y otro Button
y 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>
La forma más fácil (que sorprendentemente solo se menciona en los comentarios, por eso publico como respuesta) es:
textview.setGravity(Gravity.CENTER)
Puede configurar la gravedad
de su vista de texto en CENTER
.
Si está intentando 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>
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" />
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"/>
Como muchas respuestas sugieren anteriormente, funciona bien.
android:gravity="center"
Si desea centrarlo solo verticalmente:
android:gravity="center_vertical"
o simplemente horizontalmente:
android:gravity="center_horizontal"
Simplemente, en su archivo XML, configure la gravedad de la vista de texto en el centro:
<TextView
android:gravity="center" />
Puede hacer esto para centrar el texto
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />
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);
La altura y el ancho de TextView son contenido de ajuste, 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 programáticamente padre es 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);
TextView gravity funciona según su diseño principal.
LinearLayout :
Si usa LinearLayout, encontrará dos atributos de gravedad android: gravedad y amp; android: layout_gravity
android: gravity: representa la poción de diseño del texto interno de TextView mientras android: layout_gravity: representa la posición de TextView en la vista principal.
Si desea establecer el texto horizontalmente & amp; centrar verticalmente y luego usar el código siguiente
<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 :
Usando RelativeLayout puede usar la propiedad siguiente 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 = " verdadero " 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>
android: gravity = " center_horizontal "
para alinear el texto Centre horizontalmente.
android: gravity = " center_vertical "
para alinear el texto Centre verticalmente.
android: gravity = " center "
para alinear el texto Centre tanto vertical como horizontalmente.
<TextView
android:layout_width="match_parent"
android:gravity="center_horizontal|center_vertical"
android:layout_height="match_parent" />
Pruebe 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>
usa el siguiente código en xml, funcionó para mí, puedes cambiar la orientación que estará en el centro
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:background="@color/colorPrimaryDark"
android:gravity="center"
android:layout_height="wrap_content">
<TextView
android:id="@+id/id_text"
android:layout_width="wrap_content"
android:textSize="18sp"
android:textColor="@android:color/white"
android:textStyle="normal"
android:layout_height="wrap_content"
android:text="centre me"/>
</LinearLayout>