Come posso centrare il testo in orizzontale e in verticale in un TextView?
Domanda
Come posso centrare il testo orizzontalmente e verticalmente in un TextView
, in modo che appaia esattamente al centro del TextView
in Android
?
Soluzione
Suppongo che tu stia utilizzando il layout XML.
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/**yourtextstring**"
/>
Puoi anche usare la gravità center_vertical
o center_horizontal
secondo le tue necessità.
e come ha commentato @stealthcopter
in java: .setGravity(Gravity.CENTER);
Altri suggerimenti
android:gravity="center"
Questo farà il trucco
Puoi anche configurarlo dinamicamente usando:
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
android:layout_centerInParent="true"
Funziona quando utilizzato con un RelativeLayout in cui l'altezza del layout & amp; larghezza è impostata su wrap_content.
Puoi anche usare la combinazione:
android:gravity="left|center"
Quindi, se la larghezza della visualizzazione del testo è superiore a " fill_parent " il testo sarà comunque allineato a sinistra (non centrato come se la gravità fosse impostata solo su "centro").
Applica gravità:
TextView txtView = (TextView) findViewById(R.id.txtView);
txtView.setGravity(Gravity.CENTER_HORIZONTAL);
Per verticale:
txtView.setGravity(Gravity.CENTER_VERTICAL);
In XML:
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="@string/Hello_World"
/>
Se si utilizza TableLayout, assicurarsi di impostare anche la gravità di TableRows al centro. Altrimenti non funzionerà. Almeno non ha funzionato con me fino a quando non ho impostato la gravità di TableRow al centro.
Ad esempio, in questo modo:
<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>
Esistono due modi per farlo.
Il primo nel codice XML. Devi prestare attenzione all'attributo Gravity
. È inoltre possibile trovare questo attributo nell'Editor grafico; potrebbe essere più semplice di XML EDITOR.
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:text="Your Text"
/>
Per il tuo scenario specifico, i valori di gravità saranno:
center_vertical|center_horizontal
Nell'editor grafico troverai tutti i possibili valori, anche i loro risultati.
Devi impostare Gravità TextView (orizzontale centrale e verticale centrale) in questo modo:
android:layout_centerHorizontal="true"
e
android:layout_centerVertical="true"
E usando dinamicamente:
textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Secondo me,
android:gravity="center"
è meglio di,
android:layout_centerInParent="true"
che è meglio di,
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
almeno per la formattazione del testo.
Per layout lineare: In XML usa qualcosa del genere
<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"
/>
Per eseguire questa operazione in fase di esecuzione, utilizzare qualcosa del genere nella propria attività
TextView textView1 =(TextView)findViewById(R.id.texView1);
textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Per il layout relativo: in XML usare qualcosa del genere
<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"
/>
Per eseguire questa operazione in fase di esecuzione, utilizzare qualcosa del genere nella propria attività
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);
Utilizzare nel file XML.
File di layout
<TextView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:text="@string/stringtext"/>
o
Utilizzalo all'interno della classe Java
TextView textView =(TextView)findViewById(R.id.texviewid);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Usalo per il layout relativo
android:layout_centerInParent="true"
e per altri layout
android:gravity="center"
Mentre si utilizza Gravity funziona per TextView, esiste un metodo alternativo implementato nel livello API 17 -
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
Non conosco la differenza, ma funziona anche. Tuttavia, solo per livello API 17 o superiore.
Se l'altezza e la larghezza del TextView
sono avvolgere il contenuto
, il testo all'interno del TextView
sarà sempre centrato. Ma se la larghezza del TextView
è match_parent
e l'altezza è match_parent
o wrap_content
, devi scrivere il codice seguente:
Per 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>
Per 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>
In RelativeLayout
, sarà piacevole con esso.
E un altro pulsante
e qualsiasi altra cosa che puoi aggiungere.
Quanto segue funziona bene per me.
<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>
Il modo più semplice (che è sorprendentemente menzionato solo nei commenti, quindi perché sto postando come risposta) è:
textview.setGravity(Gravity.CENTER)
Puoi semplicemente impostare gravità
della tua visualizzazione di testo in CENTER
.
Se stai cercando di centrare il testo su un TableRow in un TableLayout, ecco come ho ottenuto questo risultato:
<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>
Ecco la mia risposta che avevo usato nella mia app. Mostra il testo al centro dello schermo.
<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" />
Se si utilizza il layout relativo:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/stringname"
android:layout_centerInParent="true"/>
Se si utilizza LinearLayout
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/stringname"
android:layout_gravity="center"/>
Come molte risposte suggerite sopra funziona bene.
android:gravity="center"
Se vuoi centrarlo solo in verticale:
android:gravity="center_vertical"
o solo in orizzontale:
android:gravity="center_horizontal"
Semplicemente, nel tuo file XML, imposta la gravità della vista di testo al centro:
<TextView
android:gravity="center" />
Puoi fare così per centrare il testo
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center" />
Possiamo raggiungere questo obiettivo in questi modi multipli: -
Metodo 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"
/>
Metodo 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"
/>
Metodo XML 03
<TextView
android:id="@+id/textView"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:gravity="center"
android:text="@strings/text"
/>
Metodo 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"
/>
Metodo Java 01
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Metodo Java 02
textview.setGravity(Gravity.CENTER);
Metodo Java 03
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
L'altezza e la larghezza di TextView sono a capo automatico, quindi il testo all'interno della vista di testo deve sempre essere centrato, quindi centrare il layout principale 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>
Anche per LinearLayout il codice è lo stesso:
<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>
e il padre pro-grammaticalmente è il codice java RelativeLayout che in fase di esecuzione usa qualcosa del genere nella tua attività
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);
La gravità di TextView funziona secondo il layout principale.
LinearLayout :
Se usi LinearLayout troverai due attributi di gravità android: gravità e amp; Android: layout_gravity
android: gravità: rappresenta la pozione di layout del testo interno di TextView mentre android: layout_gravity: rappresenta la posizione di TextView nella vista padre.
Se vuoi impostare il testo in orizzontale & amp; centrare verticalmente quindi utilizzare il codice seguente
<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 :
Utilizzando RelativeLayout è possibile utilizzare la proprietà sottostante in TextView
android: gravità = " centro " per il centro di testo in TextView.
android: gravità = " center_horizontal " testo interno se si desidera centrare orizzontalmente.
android: gravità = " center_vertical " testo interno se si desidera centrare verticalmente.
android: layout_centerInParent = " allineare " se si desidera TextView nella posizione centrale della vista padre. android: layout_centerHorizontal = " allineare " se si desidera TextView al centro in orizzontale della vista padre. android: layout_centerVertical = " allineare " se vuoi TextView nel centro verticale della vista padre.
<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 "
per allineare il testo al centro in orizzontale.
android: gravity = " center_vertical "
per allineare il testo al centro in verticale.
android: gravity = " center "
per allineare il centro del testo sia in verticale che in orizzontale.
<TextView
android:layout_width="match_parent"
android:gravity="center_horizontal|center_vertical"
android:layout_height="match_parent" />
Prova in questo modo, funzionerà
<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 il codice qui sotto in xml ha funzionato per me puoi cambiare l'orientamento che sarà al 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>