Bir TextView içinde metni yatay ve dikey olarak nasıl ortalayabilirim?


2025

Nasıl bir yatay ve dikey olarak metni ortalamak do TextViewit ortasında tam olarak görünecek şekilde o, TextViewin Android?


7
layout_width ve layout_height değerlerini fill_parent olarak ayarlayın, sonra yerçekimini merkeze ayarlayın. Hile yapacak
Amila

2
fill_parent artık kullanımdan kaldırılmıştır, bu nedenle layout_width ve layout_height öğelerinde MATCH_PARENT kullanın ve TextView öğesinin yerçekimini merkeze ayarlayın.
Bilal Ahmad

Yanıtlar:


3085

XML düzenini kullandığınızı varsayıyorum.

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

Ayrıca yerçekimini center_verticalveya center_horizontalihtiyacınıza göre kullanabilirsiniz.

ve @stealthcopter'in java'da yorumladığı gibi: .setGravity(Gravity.CENTER);


58
Bu, mizanpaj yüksekliğinin ve genişliğinin wrap_content olarak ayarlandığı bir RelativeLayout ile kullanıldığında çalışmaz
Rob

96
@ Çubuk, genişlik ve yükseklik wrap_content ise, teknik olarak, metin zaten ortalanmıştır.
JoJo

3
TextView'i başka bir görünüme göre hizalamak istiyorsam, ancak metin kendi içinde ortalanmış mı?

9
Bu benim için çalışmıyor ( android:gravity="center"). Hala ekranın en solunda görünür. :(
uSeRnAmEhAhAhAhAhA

30
Karıştırılmamak android:layout_gravity="center", başka bir şey yapar.
Rudi Kershaw

445
android:gravity="center" 

Bu hile yapacak


32
Bunun için metin görünümünün match_parent veya fill_parent olması gerekir. Sarma içeriği varsa, ortalanmaz.
Kalel Wade

7
@KalelWade: metni metin görünümünde wrap_content ile ortalamak hiç mantıklı değil. Belki de bir metin görünümünü üst görünümde ortalamayı düşünüyorsunuz, bu durumda bu satırı üst öğeye basitçe koyabilirsiniz.
Mooing Duck

@Mooing Duck Bu yüzden şal içeriği kullanmamanın nedeni mantıklı değil. Ama ya başa çıkarken, yapıştırarak ya da sadece acele ederken, iki ve ikiyi bir araya getiremezsiniz. Bu yüzden bahsetmiştim.
Kalel Wade

1
genişlik ve yüksekliğe eşit "wrap_content" içeren TextView, genişlik ve yükseklikte "match_parent" olan LinearLayout'un içindeyse, Linear_layout öğesinin layout_gravity değerini ayarlamanız gerekir.
Faisal Naseer

1
@MooingDuck, yükseklik "wrap_content" ve yerçekimi "center_vertical" olduğunda, Tasarım'ı (önizleme) ortalanmış olarak çizer, ancak bir cihazda en üste yerleştirilir. Yüksekliği "match_parent" yapın ve yerçekimini "center_vertical" veya "center" olarak ayarlayın.
CoolMind

297

Ayrıca aşağıdakileri kullanarak dinamik olarak ayarlayabilirsiniz:

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

141
Veya sadece textview.setGravity (Gravity.CENTER);
Amplify91

Hangi yolu seçeceğinize karar vermek, xml'ye yazmak veya Java dosyasına yazmak için karar verme kriterleri nelerdir?
kenju

2
@Kenju kolayca düzenlenebilir olmasını istiyorsanız ve çalışma sırasında değer değişmezse: XML. Gerçek zamanlı değeri değiştirmeniz gerekiyorsa (örneğin, kullanıcı bir düğmeye bastığında hizalamayı değiştirin), yalnızca Java üzerinden yapabilirsiniz.
Gustavo Maciel

2
@GustavoMaciel yani, dinamik olarak değiştirilmesi gerekmedikçe temelde xml ... Şimdi anladım. Basit ve kullanışlı cevabınız için teşekkürler!
kenju

115
android:layout_centerInParent="true"

Bu, mizanpajın yüksekliğinin ve genişliğinin wrap_content olarak ayarlandığı bir RelativeLayout ile kullanıldığında çalışır.


19
Bu, içindeki metni değil TextView'u ortalar.
Antropomo

2
Bu sözcük kaydırma olduğunda çalışmaz TextView. Metin, tam genişlikli olacak ve içinde çok satırlı ve SOL iki yana yaslanacak TextView. Ekranda sola dayalı görünecektir. Diğer cevaplarda belirtildiği gibi "yerçekimi" kullanmalısınız.
David Manpearl

83

Kombinasyonu da kullanabilirsiniz:

android:gravity="left|center"

Daha sonra, metin görüntüleme genişliği "dolgu_parmağından" fazlaysa, metin hala sola hizalanır (yalnızca yerçekimi yalnızca "merkez" olarak ayarlandığında ortalanmaz).


56

Yerçekimi uygulayın:

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

Dikey için:

txtView.setGravity(Gravity.CENTER_VERTICAL);

XML'de:

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

42

Bunu yapmanın iki yolu vardır.

XML kodunda bir ilk. GravityÖznitelikte dikkat etmeniz gerekir . Bu niteliği Grafik Düzenleyici'de de bulabilirsiniz; XML EDITOR'dan daha kolay olabilir.

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

Özel senaryo için yerçekimi değerleri şöyle olacaktır:

center_vertical|center_horizontal

Grafik düzenleyicide olası tüm değerleri bulacaksınız, hatta sonuçlarını görün.


41

TableLayout kullanıyorsanız, TableRows'ın ağırlık ayarını da merkeze ayarladığınızdan emin olun. Aksi takdirde çalışmaz. En azından TableRow'un ağırlık merkezini ayarlayana kadar benimle çalışmadı.

Örneğin, şöyle:

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

İlginç. Bunun LinearLayout (TableRow üst öğesi) için de geçerli olup olmadığını kontrol etmelisiniz.
Martin

38

TextView Gravity'yi (Orta Yatay ve Orta Dikey) şu şekilde ayarlamanız gerekir :

android:layout_centerHorizontal="true"   

ve

android:layout_centerVertical="true"

Ve dinamik olarak kullanarak:

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

Kod semantiği yanlış. Değiştirin layout_centerhorizontalve layout_centerverticalile layout_centerHorizontalve layout_centerVertical("H" ve "V" harfini büyük harfe çevirin, aksi takdirde çalışmaz).
yugidroid

2
layout_ *, Görünüm'ün üst öğesine nerede olmak istediğini söyler. Layout_ * olmadan View'a bileşenlerinin nasıl yerleştirileceğini söyler
Dandre Allison

34

Bence,

android:gravity="center"

daha iyi,

android:layout_centerInParent="true"

ki daha iyi,

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

en azından metni biçimlendirmek için.


30

Doğrusal Düzen için: XML'de böyle bir şey kullanın

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

Çalışma zamanında bunu yapmak için etkinliğinizde böyle bir şey kullanın

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

Göreceli Düzen için: XML'de böyle bir şey kullanın

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

Çalışma zamanında bunu yapmak için etkinliğinizde böyle bir şey kullanın

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

24

XML dosyasında kullanın.

Düzen dosyası

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

veya:

Bunu Java sınıfının içinde kullanın

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

21

Göreli düzen için bunu kullanın

android:layout_centerInParent="true"

ve diğer düzen için

android:gravity="center" 

18

Eğer TextView'syüksekliği ve genişliği olan wrap contentbir metin içinde daha sonra TextViewher zaman ortalanmalıdır. Ancak TextView'sgenişlik match_parentve yükseklik match_parentveya wrap_contentise aşağıdaki kodu yazmanız gerekir:

İçin 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>

İçin 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>

17

Yerçekimi çalışmalarını TextView için kullanırken, API seviye 17'de uygulanan alternatif bir yöntem var -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Farkı bilmiyorum ama işe yarıyor. Ancak yalnızca API seviye 17 veya üstü için.


Fark burada açıklanmıştır: stackoverflow.com/questions/16196444/…
jasdefer

Bu, metni gerçekten TextView'de ortalar. Sadece yerçekimini kullanırsanız, metnin ne olduğuna bağlı olarak bir miktar dolgu vardır ... Örneğin, ortada metin bulunan küçük bir daire rozeti varsa, çok açık bir fark görebilirsiniz.
tarrball

14

İçinde RelativeLayout onunla iyi olacak.

Ve başka Button ve ekleyebileceğiniz her şey.

Aşağıdakiler benim için iyi çalışıyor.

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

11

En kolay yol (şaşırtıcı bir şekilde sadece yorumlarda belirtilmiştir, bu yüzden neden cevap olarak gönderiyorum):

textview.setGravity(Gravity.CENTER)

11

gravityMetin görünümünüzü yalnızca içine ayarlayabilirsiniz CENTER.


10

Bir TableLayout'taki bir TableRow'da metni ortalamaya çalışıyorsanız, bunu nasıl başardım:

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

10

kullanım 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"
         />

textAlignment = "center", TextView'de match_parent için boyutlar olana kadar işi yapmayacak
SAurabh

@SAurabh yukarıdaki örnek herhangi bir sorun olmadan çalışıyor.
Chathura Wijesinghe

ebeveynine yerçekimi olmadan mı yoksa kendi içinde yerçekimini mi düzenliyor? Metin hizalaması metni görünüm sınırları içinde hizalar, bu nedenle textView match_parent'ı bu durumda alana kadar kendi ana düzeninde yerçekimi veya kendi içinde layout_gravity olmadan böyle görünmez
7'de SAurabh

9

İşte benim app kullandığım cevabım. Metni ekranın ortasında gösterir.

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

9

Göreli Düzen kullanıyorsanız:

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

LinearLayout kullanıyorsanız

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

8

Yukarıda belirtildiği gibi birçok cevap iyi çalışıyor.

android:gravity="center"

Sadece dikey olarak ortalamak istiyorsanız:

android:gravity="center_vertical"

veya sadece yatay olarak:

android:gravity="center_horizontal"

7

Basitçe, XML dosyanızda, textview yerçekimini merkeze ayarlayın:

<TextView
    android:gravity="center" />

7

Metni ortalamak için bunu yapabilirsiniz

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

7

TextView'in yüksekliği ve genişliği kaydırma içeriğidir, daha sonra metin görünümündeki metin her zaman ortalanır, ardından aşağıdakileri kullanarak ana düzeninde merkez oluşturur:

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

LinearLayout için de kod aynıdır:

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

ve pro-gramer olarak ebeveyn RelativeLayout java kodu bu çalışma zamanında faaliyetinizde böyle bir şey kullanın

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

6

Bunu şu çeşitli yollarla başarabiliriz:

XML yöntemi 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"
/>

XML yöntemi 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"
/>

XML yöntemi 03

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:gravity="center"
    android:text="@strings/text"
/>

XML yöntemi 04

<TextView  
    android:id="@+id/textView"
    android:layout_height="match_parent"
    android:layout_width="wrap_content" 
    android:layout_centerInParent="true"
    android:text="@strings/text"
/>

Java yöntemi 01

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

Java yöntemi 02

textview.setGravity(Gravity.CENTER);

Java yöntemi 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

6

TextView yerçekimi, ana düzeninize göre çalışır.

LinearLayout :

Eğer LinearLayout kullanıyorsanız iki yerçekimi özelliği android bulacaksınız: yerçekimi ve android: layout_gravity

android: yerçekimi: TextView iç metninin düzen iksirini temsil ederken android: layout_gravity: üst görünümde TextView konumunu temsil eder.

resim açıklamasını buraya girin

Metni yatay ve dikey olarak ortalamak istiyorsanız, aşağıdaki kodu kullanın

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

RelativeLayout'u kullanarak TextView'de aşağıdaki özelliği kullanabilirsiniz

android: gravity = TextView içindeki metin merkezi için "center".

android: gravity = "center_horizontal" yatay olarak ortalanmış olmasını istiyorsanız iç metin.

android: gravity = "center_vertical" dikey olarak ortalanmış isterseniz iç metin.

android: layout_centerInParent = "true" TextView'i üst görünümün orta konumunda istiyorsanız. android: layout_centerHorizontal = "true" TextView'in üst görünümün yatay ortasında olmasını istiyorsanız. android: layout_centerVertical = "true" üst görünümün dikey ortasında TextView istiyorsanız.

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

Btw, önceki düzeltmeye geri dönmenizin herhangi bir nedeni var mı? Geri aldığınız revizyon iyi bir uygulamadır, böylece editörün bahsettiği gibi metin editörlerine kodlama konusunda yardımcı olabilir.
Edric

5

Bu şekilde deneyin, işe yarayacak

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

5

Aslında fontPadding'i hariç tutarak daha iyisini yapabiliriz.

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.