ฉันจะจัดกึ่งกลางข้อความตามแนวนอนและแนวตั้งใน TextView ได้อย่างไร


2025

ฉันจะจัดกึ่งกลางข้อความในแนวนอนและแนวตั้งใน a TextViewเพื่อให้ปรากฏตรงกลางของTextViewในได้Androidอย่างไร


7
ตั้งค่าทั้ง layout_width และ layout_height เป็น fill_parent จากนั้นตั้งค่าแรงโน้มถ่วงเป็นศูนย์ นั่นจะเป็นการหลอกลวง
Amila

2
fill_parent ไม่ได้รับการสนับสนุนในขณะนี้ดังนั้นให้ใช้ MATCH_PARENT ใน layout_width และ layout_height และตั้งค่าแรงโน้มถ่วงของ TextView ให้อยู่กึ่งกลาง
Bilal Ahmad

คำตอบ:


3085

ฉันสมมติว่าคุณกำลังใช้เค้าโครง XML

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

นอกจากนี้คุณยังสามารถใช้แรงโน้มถ่วงcenter_verticalหรือcenter_horizontalตามความต้องการของคุณ

และตามที่ @stealthcopter แสดงความคิดเห็นใน java: .setGravity(Gravity.CENTER);


58
สิ่งนี้ไม่ทำงานเมื่อใช้กับ RelativeLayout โดยที่ความสูงและความกว้างของเลย์เอาต์ถูกตั้งค่าเป็น wrap_content
Rob

96
@Rob หากความกว้างและความสูงเป็น wrap_content ดังนั้นทางเทคนิคข้อความจะอยู่กึ่งกลาง
JoJo

3
ถ้าฉันต้องการจัดตำแหน่ง TextView เทียบกับมุมมองอื่น แต่ข้อความเป็นศูนย์กลางในตัวเอง?

9
สิ่งนี้ไม่ได้ผลสำหรับฉัน ( android:gravity="center") มันยังคงแสดงที่ด้านซ้ายสุดของหน้าจอ :(
uSeRnAmEhAhAhAhAhA

30
เพื่อไม่ให้สับสนandroid:layout_gravity="center"ซึ่งทำอย่างอื่น
ฤดี Kershaw

445
android:gravity="center" 

นี้จะทำเคล็ดลับ


32
มุมมองข้อความจะต้องมี match_parent หรือ fill_parent เพื่อให้ทำงานได้ หากเนื้อหาที่ตัดแล้วจะไม่อยู่กึ่งกลาง
Kalel Wade

7
@KalelWade: การจัดกึ่งกลางข้อความในมุมมองข้อความด้วย wrap_content ไม่สมเหตุสมผลเลย บางทีคุณอาจคิดว่าการจัดกึ่งกลางของมุมมองข้อความไว้ในมุมมองพาเรนต์ซึ่งในกรณีนี้คุณวางบรรทัดนี้ลงในพาเรนต์
Mooing Duck

@Minging Duck ดังนั้นเหตุผลที่ไม่ใช้เนื้อหาแบบปิด - มันไม่สมเหตุสมผล แต่เมื่อคุณเผชิญปัญหาและวางหรือเพิ่งรีบคุณอาจไม่รวมสองและสอง นั่นเป็นเหตุผลที่ฉันพูดถึงมัน
Kalel Wade

1
หาก TextView ที่มีความกว้างและความสูงเท่ากับ "wrap_content" อยู่ภายใน LinearLayout ที่มีความกว้างและความสูง "match_parent" คุณต้องตั้งค่า layout_gravity ของ Linear_layout
Faisal Naseer

1
@MooingDuck เมื่อความสูงคือ "wrap_content" และแรงโน้มถ่วงคือ "center_vertical" จะดึงการออกแบบ (ดูตัวอย่าง) เป็นกึ่งกลาง แต่ในอุปกรณ์ที่อยู่ในตำแหน่งด้านบน ดังนั้นสร้างส่วนสูง "match_parent" และตั้งค่าแรงโน้มถ่วงเป็น "center_vertical" หรือ "กึ่งกลาง"
CoolMind

297

คุณยังสามารถตั้งค่าแบบไดนามิกโดยใช้:

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

141
หรือเพียงแค่ textview.setGravity (Gravity.CENTER);
Amplify91

เกณฑ์การตัดสินในการตัดสินใจว่าจะเลือกวิธีใดในการเขียนเป็น xml หรือเขียนในไฟล์ Java
kenju

2
@Kenju หากคุณต้องการให้แก้ไขได้ง่ายและค่าจะไม่เปลี่ยนแปลงระหว่างรันไทม์: XML หากคุณต้องเปลี่ยนค่าเรียลไทม์ (ตัวอย่างเช่นเปลี่ยนการจัดตำแหน่งเมื่อผู้ใช้กดปุ่ม) จากนั้นคุณสามารถทำได้ผ่านทาง Java
Gustavo Maciel

2
@GustavoMaciel ดังนั้นโดยทั่วไปแล้ว xml เว้นแต่จะต้องแก้ไขแบบไดนามิก ... ตอนนี้ฉันได้รับแล้ว ขอบคุณสำหรับคำตอบที่ง่ายและมีประโยชน์ของคุณ!
kenju

115
android:layout_centerInParent="true"

ใช้งานได้เมื่อใช้กับ RelativeLayout โดยที่ความสูงและความกว้างของโครงร่างถูกตั้งค่าเป็น wrap_content


19
ซึ่งจัดกึ่งกลาง TextView ไม่ใช่ข้อความในนั้น
anthropomo

2
TextViewนี้ไม่ทำงานเมื่อมีคำห่อใน TextViewข้อความที่จะเต็มไปด้วยความกว้างและหลายคู่สายและซ้ายธรรมภายใน มันจะปรากฏชิดขอบด้านซ้ายบนหน้าจอ คุณควรใช้ "แรงโน้มถ่วง" ตามที่ระบุไว้ในคำตอบอื่น ๆ
David Manpearl

83

คุณยังสามารถใช้การรวมกัน:

android:gravity="left|center"

จากนั้นหากความกว้างของมุมมองข้อความมากกว่า "fill_parent" ข้อความจะยังคงจัดตำแหน่งไปทางซ้าย


56

ใช้แรงโน้มถ่วง:

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

สำหรับแนวตั้ง:

txtView.setGravity(Gravity.CENTER_VERTICAL);

ใน XML:

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

42

มีสองวิธีในการทำเช่นนี้

ครั้งแรกในรหัส XML คุณต้องให้ความสนใจที่Gravityคุณสมบัติ นอกจากนี้คุณยังสามารถค้นหาคุณลักษณะนี้ในตัวแก้ไขกราฟิก มันอาจจะง่ายกว่า XML EDITOR

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

สำหรับสถานการณ์เฉพาะของคุณค่าของแรงโน้มถ่วงจะเป็น:

center_vertical|center_horizontal

ในโปรแกรมแก้ไขกราฟิกคุณจะพบค่าที่เป็นไปได้ทั้งหมดแม้เห็นผลลัพธ์


41

หากคุณใช้ TableLayout ตรวจสอบให้แน่ใจว่าตั้งค่าความโน้มถ่วงของ TableRows ให้อยู่กึ่งกลางเช่นกัน มิฉะนั้นมันจะไม่ทำงาน. อย่างน้อยมันก็ไม่ได้ทำงานกับฉันจนกว่าฉันจะตั้งค่าแรงโน้มถ่วงของ TableRow ให้อยู่กึ่งกลาง

ตัวอย่างเช่นนี้:

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

น่าสนใจ ต้องตรวจสอบว่าถูกต้องสำหรับ LinearLayout (แม่ TableRow) เช่นกัน
Martin

38

คุณต้องตั้งค่าTextView Gravity (Center Horizontal & Center Vertical) ดังนี้:

android:layout_centerHorizontal="true"   

และ

android:layout_centerVertical="true"

และใช้แบบไดนามิก:

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

ความหมายของรหัสผิด แทนที่layout_centerhorizontalและlayout_centerverticalโดยlayout_centerHorizontalและlayout_centerVertical("H" และ "V" เป็นตัวพิมพ์ใหญ่มิฉะนั้นมันจะไม่ทำงาน)
yugidroid

2
layout_ * บอกผู้ปกครองของมุมมองว่ามันต้องการอยู่ที่ไหน ไม่มี layout_ * บอกมุมมองถึงวิธีการวางส่วนประกอบ
Dandre Allison

34

ในความเห็นของฉัน,

android:gravity="center"

ดีกว่า,

android:layout_centerInParent="true"

ซึ่งดีกว่า

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

อย่างน้อยสำหรับการจัดรูปแบบข้อความ


30

สำหรับ Linear Layout: ใน XML ใช้สิ่งนี้

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

เมื่อต้องการทำสิ่งนี้ให้ทำสิ่งนี้ในกิจกรรมของคุณ

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

สำหรับเค้าโครงที่สัมพันธ์กัน: ใน XML ใช้สิ่งนี้

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

เมื่อต้องการทำสิ่งนี้ให้ทำสิ่งนี้ในกิจกรรมของคุณ

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

จัดวางไฟล์

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

หรือ:

ใช้สิ่งนี้ภายในคลาส Java

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

21

ใช้สิ่งนี้สำหรับเค้าโครงที่สัมพันธ์กัน

android:layout_centerInParent="true"

และรูปแบบอื่น ๆ

android:gravity="center" 

18

หากTextView'sความสูงและความกว้างเป็นwrap contentข้อความที่TextViewอยู่กึ่งกลางเสมอ แต่ถ้าTextView'sความกว้างmatch_parentและความสูงเท่ากับmatch_parentหรือwrap_contentคุณต้องเขียนโค้ดด้านล่าง:

สำหรับ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>

สำหรับ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

ในขณะที่ใช้แรงโน้มถ่วงทำงานสำหรับ TextView มีวิธีการอื่นที่ใช้ใน API ระดับ 17 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

ไม่ทราบความแตกต่าง แต่ใช้งานได้เช่นกัน อย่างไรก็ตามสำหรับ API ระดับ 17 หรือสูงกว่าเท่านั้น


ความแตกต่างมีการอธิบายไว้ที่นี่: stackoverflow.com/questions/16196444/…
jasdefer

นี่จะจัดกึ่งกลางข้อความใน TextView อย่างแท้จริง ถ้าคุณใช้แรงโน้มถ่วงมันจะมีช่องว่างภายในเล็กน้อยขึ้นอยู่กับว่าข้อความคืออะไร ... ถ้าคุณมีป้ายวงกลมเล็ก ๆ ที่มีข้อความอยู่ตรงกลางคุณจะเห็นความแตกต่างที่ชัดเจนมาก
tarrball

14

ในRelativeLayoutมันจะดีกับมัน

และอีกButtonและสิ่งอื่นที่คุณสามารถเพิ่มได้

งานต่อไปนี้ดีสำหรับฉัน

<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

วิธีที่ง่ายที่สุด (ซึ่งถูกกล่าวถึงอย่างน่าประหลาดใจในความคิดเห็นเท่านั้นดังนั้นทำไมฉันโพสต์เป็นคำตอบ) คือ:

textview.setGravity(Gravity.CENTER)


10

หากคุณพยายามจัดกึ่งกลางข้อความบน TableRow ใน TableLayout นี่คือวิธีที่ฉันได้รับ:

<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

ใช้ 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 มีมิติ match_parent
Saurabh

@SAurabh ตัวอย่างข้างต้นใช้งานได้โดยไม่มีปัญหาใด ๆ
Chathura Wijesinghe

มันทำงานโดยไม่ต้องใช้แรงโน้มถ่วงกับพ่อแม่หรือแรงดึงดูดของเค้าโครงในตัวเองหรือไม่? มันจะไม่จัดตำแหน่งข้อความจะจัดข้อความภายในขอบเขตมุมมองของตนเพื่อจนกว่า TextView ใช้เวลา match_parent ในกรณีนี้มันจะไม่ดูเหมือนนี้โดยแรงโน้มถ่วงในรูปแบบปกครองหรือ layout_gravity ของมันในตัวเอง
Saurabh

9

นี่คือคำตอบของฉันที่ฉันใช้ในแอพของฉัน มันแสดงข้อความที่กึ่งกลางของหน้าจอ

<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

หากคุณใช้เค้าโครงแบบสัมพัทธ์:

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

หากคุณใช้ LinearLayout

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

8

ดังคำตอบมากมายที่แนะนำให้ใช้งานได้ดี

android:gravity="center"

หากคุณต้องการจัดกึ่งกลางมันในแนวตั้ง:

android:gravity="center_vertical"

หรือเพียงแค่แนวนอน:

android:gravity="center_horizontal"

7

เพียงแค่ในไฟล์ XML ของคุณให้ตั้งค่าแรงโน้มถ่วงของ TextView ให้อยู่กึ่งกลาง:

<TextView
    android:gravity="center" />

7

คุณสามารถทำเช่นนี้เพื่อให้ข้อความอยู่กึ่งกลาง

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

7

ความสูงและความกว้างของ TextView คือการตัดเนื้อหาแล้วข้อความภายใน textview จะอยู่กึ่งกลางจากนั้นสร้างกึ่งกลางในเค้าโครงหลักโดยใช้:

<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 รหัสก็เหมือนกัน:

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

และผู้ปกครองด้านโปรแกมแกรมคือโค้ดจาวาสคริปต์ RelativeLayout ซึ่งใช้งานในลักษณะนี้ในกิจกรรมของคุณ

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

เราสามารถทำสิ่งนี้ได้หลายวิธี: -

วิธี 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"
/>

วิธี 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"
/>

วิธี XML 03

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

วิธีการ 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"
/>

วิธีการของ Java 01

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

วิธี Java 02

textview.setGravity(Gravity.CENTER);

วิธีการ Java 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

6

แรงโน้มถ่วง TextView ทำงานตามรูปแบบหลักของคุณ

LinearLayout :

หากคุณใช้ LinearLayout คุณจะพบกับคุณลักษณะแรงโน้มถ่วงของ Android สองตัว: แรงโน้มถ่วงและ Android: layout_gravity

android: แรงโน้มถ่วง: แสดงถึง potion เลย์เอาต์ของข้อความภายในของ TextView ในขณะที่ android: layout_gravity: แทนตำแหน่ง TextView ในมุมมองพาเรนต์

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการตั้งค่าข้อความในแนวนอนและแนวตั้งให้ใช้โค้ดข้างล่างนี้

<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 คุณสามารถใช้คุณสมบัติด้านล่างใน TextView

android: gravity = "center" สำหรับ text center ใน TextView

android: แรงโน้มถ่วง = "center_horizontal" ข้อความภายในหากคุณต้องการกึ่งกลางแนวนอน

android: แรงโน้มถ่วง = "center_vertical" ข้อความภายในหากคุณต้องการให้อยู่กึ่งกลางแนวตั้ง

android: layout_centerInParent = "true" ถ้าคุณต้องการ TextView ในตำแหน่งกึ่งกลางของมุมมองพาเรนต์ android: layout_centerHorizontal = "true" ถ้าคุณต้องการ TextView ในแนวนอนกึ่งกลางของมุมมองพาเรนต์ android: layout_centerVertical = "true" ถ้าคุณต้องการ TextView ในแนวตั้งตรงกลางของมุมมองพาเรนต์

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

ด้วยเหตุผลใดก็ตามที่คุณย้อนกลับไปสู่การแก้ไขก่อนหน้านี้ การแก้ไขที่คุณย้อนกลับเป็นวิธีปฏิบัติที่ดีเพื่อให้สิ่งที่ผู้แก้ไขได้กล่าวถึงสามารถช่วยแก้ไขข้อความด้วยการเข้ารหัส
Edric

5

ลองใช้วิธีนี้มันจะได้ผล

            <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

ที่จริงแล้วเราสามารถทำได้ดีกว่าโดยไม่รวม fontPadding

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.