Como fazer texto center I horizontalmente e verticalmente em um TextView?
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
?
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 ??p>
<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
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>