Bagaimana cara memusatkan teks secara horizontal dan vertikal di dalam TextView?


2026

Bagaimana cara pusat teks horizontal dan vertikal dalam TextView, sehingga muncul persis di tengah-tengah TextViewdi Android?


7
atur layout_width dan layout_height menjadi fill_parent, lalu atur gravitasi ke pusat. Itu akan melakukan triknya
Amila

2
fill_parent sudah tidak digunakan lagi sekarang jadi gunakan MATCH_PARENT di layout_width dan layout_height dan atur gravitasi dari TextView ke tengah.
Bilal Ahmad

Jawaban:


3086

Saya berasumsi Anda menggunakan tata letak XML.

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

Anda juga dapat menggunakan gravitasi center_verticalatau center_horizontalsesuai kebutuhan Anda.

dan seperti yang dikomentari @stealthcopter di java: .setGravity(Gravity.CENTER);


58
Ini tidak berfungsi ketika digunakan dengan RelativeLayout di mana tinggi & lebar tata letak diatur ke wrap_content
Rob

96
@ Rob, jika lebar dan tinggi wrap_content, maka secara teknis, teks sudah di tengah.
JoJo

3
Jika saya ingin menyelaraskan TextView relatif ke tampilan lain, tapi itu terpusat pada teks itu sendiri?

9
Ini tidak berfungsi untuk saya ( android:gravity="center"). Itu masih menunjukkan di paling kiri layar. :(
uSeRnAmEhAhAhAhAhA

30
Jangan bingung dengan android:layout_gravity="center", yang melakukan sesuatu yang lain.
Rudi Kershaw

445
android:gravity="center" 

Ini akan melakukan triknya


32
Tampilan teks harus match_parent atau fill_parent agar ini berfungsi. Jika itu membungkus konten, maka itu tidak akan terpusat.
Kalel Wade

7
@KalelWade: memusatkan teks dalam tampilan teks dengan wrap_content tidak masuk akal sama sekali. Mungkin Anda berpikir untuk memusatkan tampilan teks dalam tampilan induk, dalam hal ini, Anda secara simultan menempatkan baris ini di induk.
Mooing Duck

@Moing Duck Jadi alasan untuk tidak menggunakan konten bungkus - itu tidak masuk akal. Tetapi ketika Anda sedang mengatasi dan menempel atau hanya terburu-buru, Anda mungkin tidak menyatukan dua dan dua. Itu sebabnya saya menyebutkannya.
Kalel Wade

1
jika TextView dengan lebar dan tinggi sama dengan "wrap_content" ada di dalam LinearLayout dengan lebar dan tinggi "match_parent" maka Anda perlu mengatur layout_gravity dari Linear_layout.
Faisal Naseer

1
@ MoooDuck, ketika tinggi "wrap_content" dan gravitasi "center_vertical", ia menarik Desain (pratinjau) sebagai terpusat, tetapi di perangkat itu diposisikan ke atas. Jadi buat tinggi "match_parent" dan atur gravitasi ke "center_vertical" atau "center".
CoolMind

297

Anda juga dapat mengaturnya secara dinamis menggunakan:

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

141
Atau hanya textview.setGravity (Gravity.CENTER);
Amplify91

Apa kriteria penilaian untuk memutuskan cara memilih, untuk menulis dalam xml atau menulis dalam file Java?
kenju

2
@ Kenju jika Anda ingin mudah diedit dan nilainya tidak akan berubah selama runtime: XML. Jika Anda harus mengubah nilai realtime (misalnya, mengubah penyelarasan saat pengguna menekan tombol) maka Anda hanya dapat melakukannya melalui Java.
Gustavo Maciel

2
@ GustavoMaciel jadi, pada dasarnya xml kecuali perlu diubah secara dinamis ... Sekarang saya mengerti. Terima kasih atas jawaban Anda yang sederhana dan bermanfaat!
kenju 6-15

115
android:layout_centerInParent="true"

Ini berfungsi ketika digunakan dengan RelativeLayout di mana tinggi & lebar tata letak diatur ke wrap_content.


19
Ini memusatkan TextView, bukan teks di dalamnya.
antropomo

2
Ini TIDAK berfungsi bila ada bungkus kata di TextView. Teks akan menjadi lebar penuh dan multi-baris DAN LEFT-dibenarkan dalam TextView. Ini akan muncul dibenarkan kiri pada tampilan. Anda harus menggunakan "gravitasi" sebagaimana ditentukan dalam jawaban lain.
David Manpearl

83

Anda juga dapat menggunakan kombinasi:

android:gravity="left|center"

Kemudian, jika lebar tampilan teks lebih dari "fill_parent" teks masih akan disejajarkan ke kiri (tidak di tengah seperti dengan gravitasi yang hanya diatur ke "tengah").


56

Terapkan gravitasi:

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

Untuk vertikal:

txtView.setGravity(Gravity.CENTER_VERTICAL);

Dalam XML:

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

42

Ada dua cara untuk melakukan hal ini.

Yang pertama dalam kode XML. Anda perlu memperhatikan di GravityAtribut. Anda juga dapat menemukan atribut ini di Editor Grafik; mungkin lebih mudah daripada EDITOR XML.

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

Untuk skenario spesifik Anda, nilai gravitasi akan menjadi:

center_vertical|center_horizontal

Di editor grafis Anda akan menemukan semua nilai yang mungkin, bahkan melihat hasilnya.


41

Jika Anda menggunakan TableLayout pastikan untuk mengatur gravitasi TableRows ke tengah juga. Kalau tidak, itu tidak akan berhasil. Setidaknya itu tidak bekerja dengan saya sampai saya mengatur gravitasi TableRow ke tengah.

Misalnya, seperti ini:

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

Menarik. Harus memeriksa apakah itu berlaku untuk LinearLayout (induk TableRow) juga.
Martin

38

Anda perlu mengatur TextView Gravity (Center Horizontal & Center Vertical) seperti ini:

android:layout_centerHorizontal="true"   

dan

android:layout_centerVertical="true"

Dan secara dinamis menggunakan:

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

Semantik kode salah. Ganti layout_centerhorizontaldan layout_centerverticaldengan layout_centerHorizontaldan layout_centerVertical("H" dan "V" ke huruf besar, jika tidak, tidak akan berfungsi).
yugidroid

2
layout_ * memberi tahu induk Lihat di mana ia ingin berada. Tanpa layout_ * memberi tahu View cara menempatkan komponennya
Dandre Allison

34

Menurutku,

android:gravity="center"

lebih baik dari,

android:layout_centerInParent="true"

mana yang lebih baik dari,

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

setidaknya untuk memformat teks.


30

Untuk Tata Letak Linear: Dalam XML gunakan sesuatu seperti ini

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

Untuk melakukan ini pada waktu berjalan gunakan sesuatu seperti ini dalam aktivitas Anda

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

Untuk Relative Layout: di XML gunakan beberapa hal seperti ini

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

Untuk melakukan ini pada waktu berjalan gunakan sesuatu seperti ini dalam aktivitas Anda

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

Gunakan dalam file XML.

File tata letak

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

atau:

Gunakan ini di dalam kelas Java

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

21

Gunakan ini untuk tata letak relatif

android:layout_centerInParent="true"

dan untuk tata letak lainnya

android:gravity="center" 

18

Jika TextView'stinggi dan lebarnya wrap contentmaka teks di dalam TextViewselalu berada di tengah. Tetapi jika TextView'slebarnya match_parentdan tingginya adalah match_parentatau wrap_contentmaka Anda harus menulis kode di bawah ini:

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

Untuk 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

Saat menggunakan karya gravitasi untuk TextView, ada metode alternatif yang diterapkan di API level 17 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Tidak tahu bedanya, tetapi berhasil juga. Namun hanya untuk API level 17 atau lebih tinggi.


Perbedaannya dijelaskan di sini: stackoverflow.com/questions/16196444/…
jasdefer

Ini akan benar-benar menempatkan teks di TextView. Jika Anda hanya menggunakan gravitasi, ada sedikit trailing padding tergantung pada apa teksnya .... Jika Anda memiliki lencana lingkaran kecil dengan teks di tengah, misalnya, Anda dapat melihat perbedaan yang sangat jelas.
tarrball

14

Dalam RelativeLayout, itu akan menyenangkan dengan itu.

Dan yang lainnya Buttondan hal lain yang dapat Anda tambahkan.

Berikut ini berfungsi dengan baik untuk saya.

<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

Cara termudah (yang secara mengejutkan hanya disebutkan dalam komentar, maka mengapa saya memposting sebagai jawaban) adalah:

textview.setGravity(Gravity.CENTER)


10

Jika Anda mencoba memusatkan teks pada TableRow di TableLayout, berikut adalah cara saya mencapai ini:

<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

Menggunakan 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" tidak akan melakukan pekerjaan sampai TextView memiliki dimensi untuk match_parent
SAurabh

@ Saurabh contoh di atas berfungsi tanpa masalah.
Chathura Wijesinghe

apakah itu bekerja tanpa gravitasi ke induk atau tata letak gravitasi itu sendiri? Ini tidak akan penyelarasan teks akan menyelaraskan teks dalam batas tampilan sehingga hingga textView mengambil match_parent dalam hal ini tidak akan tampak seperti ini tanpa gravitasi di tata letak induknya atau layout_gravity dengan sendirinya
SAurabh

9

Inilah jawaban saya yang telah saya gunakan di aplikasi saya. Ini menunjukkan teks di tengah layar.

<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

Jika Anda menggunakan Layout Relatif:

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

Jika Anda menggunakan LinearLayout

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

8

Karena banyak jawaban yang disarankan di atas berfungsi dengan baik.

android:gravity="center"

Jika Anda ingin memusatkannya secara vertikal:

android:gravity="center_vertical"

atau hanya secara horizontal:

android:gravity="center_horizontal"

7

Cukup, dalam file XML Anda, atur gravitasi tampilan teks ke pusat:

<TextView
    android:gravity="center" />

7

Anda bisa melakukan ini untuk mendapatkan teks yang terpusat

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

7

Tinggi dan lebar TextView adalah konten bungkus maka teks dalam tampilan teks selalu terpusat, lalu buat pusat dalam tata letak induknya dengan menggunakan:

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

Untuk LinearLayout juga kodenya sama:

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

dan induk pro-gramatikal adalah kode java RelativeLayout ini saat dijalankan menggunakan sesuatu seperti ini dalam aktivitas Anda

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

Kita dapat mencapai ini dengan berbagai cara: -

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

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

Metode XML 03

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

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

Metode Java 01

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

Metode Java 02

textview.setGravity(Gravity.CENTER);

Metode Java 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

6

TextView Gravity berfungsi sesuai tata letak induk Anda.

LinearLayout :

Jika Anda menggunakan LinearLayout maka Anda akan menemukan dua atribut gravitasi android: gravity & android: layout_gravity

android: gravity: mewakili ramuan tata letak teks internal TextView sedangkan android: layout_gravity: mewakili posisi TextView dalam tampilan induk.

masukkan deskripsi gambar di sini

Jika Anda ingin mengatur teks secara horizontal & tengah secara vertikal maka gunakan kode di bawah ini

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

Menggunakan RelativeLayout Anda dapat menggunakan properti di bawah ini di TextView

android: gravity = "center" untuk pusat teks di TextView.

android: gravity = "center_horizontal" teks bagian dalam jika Anda ingin memusatkan secara horizontal.

android: gravity = "center_vertical" teks bagian dalam jika Anda ingin bagian tengah vertikal.

android: layout_centerInParent = "true" jika Anda ingin TextView berada di posisi tengah tampilan induk. android: layout_centerHorizontal = "true" jika Anda ingin TextView berada di tengah tengah tampilan induk. android: layout_centerVertical = "true" jika Anda ingin TextView berada di tengah tampilan induk.

<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, ada alasan Anda mundur ke revisi sebelumnya? Revisi yang Anda kembalikan adalah praktik yang baik sehingga apa yang telah disebutkan editor dapat membantu editor teks dengan penyandian.
Edric

5

Coba dengan cara ini, itu akan berhasil

            <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

Sebenarnya, kita bisa melakukan yang lebih baik dengan mengecualikan fontPadding.

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.