Como centralizo o texto horizontal e verticalmente em um TextView?

2026

Como centralizo o texto horizontalmente e verticalmente em um TextView, para que ele apareça exatamente no meio do TextViewin Android?

pupeno
fonte
7
defina layout_width e layout_height como fill_parent e, em seguida, defina a gravidade no centro. Isso vai dar certo
Amila
2
fill_parent está obsoleto agora, portanto, use MATCH_PARENT em layout_width e layout_height e defina a gravidade do TextView para o centro.
Bilal Ahmad

Respostas:

3086

Suponho que você esteja usando o layout XML.

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

Você também pode usar a gravidade center_verticalou de center_horizontalacordo com sua necessidade.

e como @stealthcopter comentou em java: .setGravity(Gravity.CENTER);

Conta
fonte
58
Isso não funciona quando usado com um RelativeLayout onde a altura da disposição e largura são definidas para wrap_content
Rob
96
@ Rob, se a largura e a altura são wrap_content, tecnicamente, o texto já está centralizado.
JoJo
3
Se eu quiser alinhar o TextView em relação a outro modo de exibição, mas o texto é centrado em si mesmo?
9
Isso não está funcionando para mim ( android:gravity="center"). Ele ainda aparece na extrema esquerda da tela. :(
uSeRnAmEhAhAhAhAhA
30
Não deve ser confundido android:layout_gravity="center", o que faz outra coisa.
Rudi Kershaw
445
android:gravity="center" 

Isto irá fazer o truque

Jean
fonte
32
A visualização de texto deve ser match_parent ou fill_parent para que isso funcione. Se seu conteúdo de quebra automática, ele não será centralizado.
Kalel Wade
7
@KalelWade: centralizar texto em uma visualização de texto com wrap_content não faz nenhum sentido. Talvez você esteja pensando em centralizar uma visualização de texto em uma visualização pai; nesse caso, você simplesmente coloca essa linha no pai.
Mooing Duck
@Mooing Duck Portanto, o motivo para não usar o conteúdo do wrap - não faz sentido. Mas quando você está lidando e colando ou apenas se apressando, não pode colocar dois e dois juntos. Por isso eu mencionei.
Kalel Wade
1
se o TextView com largura e altura igual a "wrap_content" estiver dentro do LinearLayout com largura e altura "match_parent", será necessário definir a gravidade do layout do Linear_layout.
Faisal Naseer
1
@MooingDuck, quando a altura é "wrap_content" e a gravidade é "center_vertical", ele desenha no Design (visualização) como centralizado, mas em um dispositivo é posicionado na parte superior. Portanto, faça a altura "match_parent" e defina a gravidade como "center_vertical" ou "center".
CoolMind 28/02
297

Você também pode configurá-lo dinamicamente usando:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
zeevb
fonte
141
Ou apenas textview.setGravity (Gravity.CENTER);
usar o seguinte comando
Quais são os critérios de julgamento para decidir qual caminho escolher, escrever em xml ou gravar em arquivo Java?
Kenju 20/08
2
@ Kenju se você quiser que seja facilmente editável e o valor não seja alterado durante o tempo de execução: XML. Se você precisar alterar o valor em tempo real (por exemplo, alterar o alinhamento quando o usuário pressionar um botão), poderá fazê-lo apenas via Java.
Gustavo Maciel
2
@GustavoMaciel então, basicamente xml, a menos que precise ser modificado dinamicamente ... Agora eu entendi. Obrigado pela sua resposta simples e útil!
Kenju #
115
android:layout_centerInParent="true"

Isso funciona quando usado com um RelativeLayout em que a altura e a largura do layout são definidas como wrap_content.

eseese
fonte
19
Isso centraliza o TextView, não o texto nele.
Anthropomo
2
Isso NÃO funciona quando há quebra de linha no TextView. O texto será de largura total e com várias linhas e justificado à esquerda no TextView. Aparecerá justificado à esquerda no visor. Você deve usar "gravidade", conforme especificado nas outras respostas.
precisa saber é o seguinte
83

Você também pode usar a combinação:

android:gravity="left|center"

Então, se a largura da visualização de texto for maior que "fill_parent", o texto ainda estará alinhado à esquerda (não centralizado como com a gravidade configurada apenas para "center").

Szorstki
fonte
56

Aplique gravidade:

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

Para vertical:

txtView.setGravity(Gravity.CENTER_VERTICAL);

Em XML:

<TextView      
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"
    android:text="@string/Hello_World"        
/>
Gaganpreet Singh
fonte
42

Há duas maneiras de fazer isso.

O primeiro no código XML. Você precisa prestar atenção no Gravityatributo. Você também pode encontrar esse atributo no Editor gráfico; pode ser mais fácil que o XML EDITOR.

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

Para o seu cenário específico, os valores da gravidade serão:

center_vertical|center_horizontal

No editor gráfico, você encontrará todos os valores possíveis e até os resultados.

Cristiano Guerra
fonte
41

Se você estiver usando o TableLayout, certifique-se de definir também a gravidade das TableRows. Caso contrário, não funcionará. Pelo menos não funcionou comigo até eu definir a gravidade do TableRow para o centro.

Por exemplo, assim:

<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
fonte
Interessante. É necessário verificar se isso é válido para LinearLayout (o pai do TableRow) também.
Martin
38

Você precisa definir a Gravidade do TextView (centro horizontal e centro vertical) assim:

android:layout_centerHorizontal="true"   

e

android:layout_centerVertical="true"

E usando dinamicamente:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
NagarjunaReddy
fonte
A semântica do código está incorreta. Substitua layout_centerhorizontale layout_centerverticalpor layout_centerHorizontale layout_centerVertical("H" e "V" para maiúsculas, caso contrário, não funcionará).
Yugidroid
2
layout_ * informa ao pai da View onde ela quer estar. Sem layout_ * conta a Ver como colocar os seus componentes
Dandre Allison
34

Na minha opinião,

android:gravity="center"

é melhor que,

android:layout_centerInParent="true"

o que é melhor que,

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

pelo menos para formatar o texto.

epicness42
fonte
30

Para layout linear: em XML, use algo como isto

<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 fazer isso em tempo de execução, use algo como isto em sua atividade

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

Para layout relativo: em XML, use algo parecido com isto

<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 fazer isso em tempo de execução, use algo como isto em sua atividade

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

Use no arquivo XML.

Arquivo de layout

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

ou:

Use isso dentro da classe Java

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

Use isso para o layout relativo

android:layout_centerInParent="true"

e para outro layout

android:gravity="center" 

fonte
18

Se a TextView'saltura e a largura forem wrap content, o texto TextViewsempre estará centralizado. Mas se a TextView'slargura é match_parente a altura é match_parentou, wrap_contententão, você deve escrever o código abaixo:

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

Enquanto o uso da gravidade funciona para o TextView, há um método alternativo implementado no nível 17 da API -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Não sei a diferença, mas também funciona. No entanto, apenas para o nível 17 da API ou superior.

novato
fonte
A diferença é descrita aqui: stackoverflow.com/questions/16196444/…
jasdefer
Isso realmente centralizará o texto no TextView. Se você usar apenas a gravidade, haverá um pouco de preenchimento à direita, dependendo do texto.
tarrball
14

Em RelativeLayout, será bom com isso.

E outro Buttone qualquer outra coisa que você possa adicionar.

O seguinte funciona bem para mim.

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

A maneira mais fácil (que é surpreendentemente mencionada apenas nos comentários, por isso estou postando como resposta) é:

textview.setGravity(Gravity.CENTER)
user1
fonte
11

Você pode apenas definir o gravityda sua visualização de texto CENTER.

note-knotz
fonte
10

Se você está tentando centralizar o texto em um TableRow em um TableLayout, eis como eu consegui isso:

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

Usar 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
fonte
TextAlignment = "center" não vai fazer o trabalho até que o TextView tem dimensões para match_parent
Saurabh
O exemplo acima do @SAurabh está funcionando sem problemas.
Chathura Wijesinghe 19/06/19
ele está trabalhando sem gravidade para gerar os pais ou distribuir a gravidade em si? Não alinhará o texto alinhará o texto dentro de seus limites de visualização; portanto, até que o textView obtenha match_parent nesse caso, não parecerá isso sem gravidade no layout pai ou no layout_gravity em si
SAurabh
9

Aqui está a minha resposta que eu tinha usado no meu aplicativo. Mostra o texto no centro da tela.

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

Se você estiver usando o Layout Relativo:

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

Se você estiver usando LinearLayout

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

Como muitas respostas sugerem acima, funciona bem.

android:gravity="center"

Se você deseja centralizá-lo apenas na vertical:

android:gravity="center_vertical"

ou apenas horizontalmente:

android:gravity="center_horizontal"
rgamber
fonte
7

Simplesmente, no seu arquivo XML, defina a gravidade do textview no centro:

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

Você pode fazer assim para centralizar o texto

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

A altura e a largura do TextView são agrupadas, o texto na visualização de texto sempre é centralizado e, em seguida, é centralizado no layout pai 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 também o código é o mesmo:

<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 o pai pro gramatical é o código Java RelativeLayout, isso em tempo de execução, use algo assim em sua atividade

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);
Attif
fonte
6

Podemos conseguir isso de várias maneiras:

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

A gravidade do TextView funciona de acordo com o layout pai.

LinearLayout :

Se você usar o LinearLayout, encontrará dois atributos de gravidade android: gravity e android: layout_gravity

android: gravidade: representa a poção de layout do texto interno do TextView enquanto android: layout_gravity: representa a posição do TextView na visualização pai.

insira a descrição da imagem aqui

Se você deseja definir o texto na horizontal e na vertical, use o código abaixo

<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, você pode usar a propriedade abaixo no TextView

android: gravity = "center" para o centro de texto no TextView.

android: gravity = "center_horizontal" texto interno, se você quiser centralizado horizontalmente.

android: gravity = "center_vertical" texto interno, se você deseja centralizar verticalmente.

android: layout_centerInParent = "true" se você deseja TextView na posição central da visualização pai. android: layout_centerHorizontal = "true" se você quiser o TextView no centro horizontal da visualização pai. android: layout_centerVertical = "true" se você quiser o TextView no centro vertical da visualização pai.

<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
fonte
Btw, algum motivo para você reverter para a revisão anterior? A revisão que você reverteu é uma boa prática para que, conforme mencionado pelo editor, possa ajudar os editores de texto na codificação.
Edric
5

Tente assim, vai 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
fonte
5

Na verdade, podemos fazer melhor excluindo fontPadding.

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