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?

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

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

Jean
sumber
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);
zeevb
sumber
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.

itherese
sumber
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").

Szorstki
sumber
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"        
/>
Gaganpreet Singh
sumber
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.

Cristiano Guerra
sumber
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>
Maverick1st
sumber
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);
NagarjunaReddy
sumber
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.

epicness42
sumber
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);
Karthikeyan
sumber
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);
venu
sumber
21

Gunakan ini untuk tata letak relatif

android:layout_centerInParent="true"

dan untuk tata letak lainnya

android:gravity="center" 

sumber
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>
Avijit Karmakar
sumber
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.

cupu
sumber
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>
Yuda Prawira
sumber
11

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

textview.setGravity(Gravity.CENTER)
pengguna1
sumber
11

Anda dapat mengatur tampilan gravityteks Anda CENTER.

note-knotz
sumber
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>
dyslexicanaboko
sumber
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"
         />
Chathura Wijesinghe
sumber
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" />
Md. Naushad Alam
sumber
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"/>
Niranjan
sumber
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"
rgamber
sumber
7

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

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

Anda bisa melakukan ini untuk mendapatkan teks yang terpusat

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />
Kamlakar Kate
sumber
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);
Attif
sumber
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);
ArghadipDasCEO
sumber
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>
Alpesh Sorathiya
sumber
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>
Kekurangan
sumber
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"
/>
Seanghay
sumber