Pergunta

Como faço para centralizar o texto horizontalmente e verticalmente em um TextView, para que ele aparece exatamente no meio do TextView em Android?

Foi útil?

Solução

Eu estou supondo que você está 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 center_vertical gravidade ou center_horizontal acordo com sua necessidade.

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

Outras dicas

android:gravity="center" 

Isto irá fazer o truque

Você também pode configurá-lo de forma dinâmica usando:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
android:layout_centerInParent="true"

Isso funciona quando usado com uma RelativeLayout onde a altura da disposição e largura são definidas para wrap_content.

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

android:gravity="left|center"

Então, se a largura textview é mais do que "fill_parent" o texto ainda será alinhado à esquerda (não centralizada como com o conjunto de gravidade apenas para "centro").

Aplicar gravidade:

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

Para verticais:

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

Se você estiver usando TableLayout certifique-se de definir a gravidade dos TableRows para o centro também. Caso contrário, não vai funcionar. Pelo menos não funcionou comigo até eu definir a gravidade da TableRow ao 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>

Existem duas maneiras de se fazer isso.

O primeiro no código XML. Você precisa prestar atenção na Atributo Gravity. Você também pode encontrar esse atributo no editor gráfico; pode ser mais fácil do que o editor de XML.

<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 de gravidade será:

center_vertical|center_horizontal

No editor gráfico você vai encontrar todos os valores possíveis, até mesmo ver seus resultados.

Você precisa definir TextView Gravidade (Centro Horizontal e Vertical Centro) como este:

android:layout_centerHorizontal="true"   

e

android:layout_centerVertical="true"

E dinamicamente usando:

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

Na minha opinião,

android:gravity="center"

é melhor do que,

android:layout_centerInParent="true"

que é melhor do que,

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

, pelo menos para a formatação de texto.

Para Linear Layout: Em uso XML 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 pelo uso tempo de execução algo assim em sua atividade

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

Para Disposição Relativa: em uso XML alguma coisa como esta

<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 pelo uso tempo de execução 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);

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 esta dentro da classe Java

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

Use este para a disposição relativa

android:layout_centerInParent="true"

e para outro esquema

android:gravity="center" 

Ao usar obras de gravidade para TextView, há um método alternativo implementado em nível de API 17 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

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

Se a altura TextView's e largura são wrap content em seguida, o texto dentro do TextView ser sempre centrado. Mas se a largura TextView's é match_parent e altura é match_parent ou wrap_content então você tem que 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>

Em RelativeLayout, vai ser bom com ele.

E outro Button e qualquer outra coisa que você pode adicionar.

A seguir funciona muito 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>

A maneira mais fácil (que é surpreendentemente apenas mencionado nos comentários, daí porque estou postando como uma resposta) é:

textview.setGravity(Gravity.CENTER)

Você pode apenas definir o gravity do seu textview em CENTER.

Se você está tentando texto center em um TableRow em um TableLayout, aqui está como eu conseguido 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>

Aqui está a minha resposta que eu tinha usado em meu aplicativo. Ele 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" />

Se você estiver usando Disposição Relativa:

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

Como muitas respostas sugerem acima funciona bem.

android:gravity="center"

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

android:gravity="center_vertical"

ou apenas na horizontal:

android:gravity="center_horizontal"

Simplesmente, em seu arquivo XML, defina a gravidade textview ao centro:

<TextView
    android:gravity="center" />

Você pode fazer como este para obter texto centrado

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

Podemos conseguir isso com essas múltiplas 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);

A altura da TextView e largura são conteúdos envoltório, em seguida, o texto dentro do textview ser sempre centrado, em seguida, fazer o centro em seu 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 pai pró-gramaticalmente é código java RelativeLayout isso em tempo de execução usar 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);

TextView a gravidade funciona como por seu layout pai.

LinearLayout :

Se você usar LinearLayout então você vai encontrar dois atributo gravidade android: gravidade e android: layout_gravity

android: gravidade: representam poção layout do texto interno do TextView enquanto android: layout_gravity:. representar a posição TextView na vista principal

enter descrição da imagem aqui

Se você quiser texto conjunto horizontalmente e verticalmente centro, em seguida, usar o código abaixo este

<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 abaixo propriedade em TextView

android:. Gravidade = "center" para o centro texto em TextView

android:. Gravidade = "center_horizontal" texto interno se você quer horizontalmente centrado

android:. Gravidade = "center_vertical" texto interno se você quer verticalmente centrado

android: layout_centerInParent = "true" se você quiser TextView na posição central da vista principal. android: layout_centerHorizontal = "true" se você quiser TextView na horizontal centro da vista principal. android:. layout_centerVertical = "true" se você quiser TextView na vertical centro de vista 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>

android:gravity="center_horizontal" para o texto Alinhar no centro horizontalmente. android:gravity="center_vertical" para o texto Alinhar no centro vertical. android:gravity="center" para o texto Alinhar no centro vertical e horizontalmente.

<TextView
        android:layout_width="match_parent"
        android:gravity="center_horizontal|center_vertical"
        android:layout_height="match_parent" />

Tente desta forma, ele vai trabalhar

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

usar o código abaixo em xml ele trabalhou para mim você pode alterar a orientação será no 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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top