Làm cách nào để căn giữa văn bản theo chiều ngang và chiều dọc trong TextView?


2026

Làm cách nào để tôi căn giữa văn bản theo chiều ngang và chiều dọc trong một TextView, để nó xuất hiện chính xác ở giữa TextViewtrong Android?


7
đặt cả layout_creen và layout_height thành fill_parent, sau đó đặt trọng lực thành chính giữa. Điều đó sẽ tạo nên mánh khóe
Amila

2
fill_parent không được dùng nữa, vì vậy hãy sử dụng MATCH_PARENT trong layout_ thong và layout_height và đặt trọng lực của TextView thành chính giữa.
Bilal Ahmad

Câu trả lời:


3086

Tôi giả sử bạn đang sử dụng bố cục XML.

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

Bạn cũng có thể sử dụng trọng lực center_verticalhoặc center_horizontaltheo nhu cầu của bạn.

và như @stealthawaii đã nhận xét trong java: .setGravity(Gravity.CENTER);


58
Điều này không hoạt động khi được sử dụng với RelativeLayout nơi chiều cao và chiều rộng của bố cục được đặt thành quấn_content
Rob

96
@Rob, nếu chiều rộng và chiều cao là quấn_content, thì về mặt kỹ thuật, văn bản đã được căn giữa.
JoJo

3
Nếu tôi muốn căn chỉnh TextView so với chế độ xem khác, nhưng văn bản đó có nằm ở chính giữa không?

9
Điều này không làm việc cho tôi ( android:gravity="center"). Nó vẫn hiển thị ở phía xa bên trái của màn hình. :(
uSeRnAmEhAhAHAHA

30
Không được nhầm lẫn android:layout_gravity="center", mà làm một cái gì đó khác.
Rudi Kershaw

445
android:gravity="center" 

Điều này sẽ làm cho mẹo


32
Textview phải là match_parent hoặc fill_parent để nó hoạt động. Nếu nội dung gói của nó, sau đó nó sẽ không trung tâm.
Kalel Wade

7
@KalelWade: căn giữa văn bản trong một textview với quấn_content không có ý nghĩa gì cả. Có thể bạn đang nghĩ đến việc tập trung vào một chế độ xem văn bản trong chế độ xem chính, trong trường hợp đó, bạn mô phỏng dòng này một cách đơn giản.
Vịt Mooing

@Mooing Duck Vì vậy, lý do không sử dụng nội dung bọc - nó không có ý nghĩa. Nhưng khi bạn đang đối phó và dán hoặc chỉ vội vã, bạn không thể đặt hai và hai lại với nhau. Đó là lý do tại sao tôi đề cập đến nó.
Kalel Wade

1
nếu TextView có chiều rộng và chiều cao bằng "quấn_content" nằm trong linearLayout với chiều rộng và chiều cao "match_parent" thì bạn cần đặt layout_gravity của linear_layout.
Faisal Naseer

1
@MooingDuck, khi chiều cao là "quấn_content" và trọng lực là "centre_vertical", nó sẽ lấy Thiết kế (xem trước) làm trung tâm, nhưng trong một thiết bị, nó được đặt ở trên cùng. Vì vậy, hãy tạo chiều cao "match_parent" và đặt trọng lực thành "centre_vertical" hoặc "centre".
CoolMind

297

Bạn cũng có thể thiết lập nó một cách linh hoạt bằng cách sử dụng:

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

141
Hoặc chỉ là textview.setGravity (Gravity.CENTER);
Amplify91

Các tiêu chí để đánh giá để quyết định cách chọn, viết trong xml hoặc viết trong tệp Java là gì?
kenju

2
@Kenju nếu bạn muốn nó có thể dễ dàng chỉnh sửa và giá trị sẽ không thay đổi trong thời gian chạy: XML. Nếu bạn phải thay đổi giá trị thời gian thực (ví dụ: thay đổi căn chỉnh khi người dùng nhấn nút) thì bạn chỉ có thể thực hiện thông qua Java.
Gustavo Maciel

2
@GustavoMaciel vì vậy, về cơ bản là xml trừ khi nó cần được sửa đổi một cách linh hoạt ... Bây giờ tôi đã nhận được nó. Cảm ơn câu trả lời đơn giản và hữu ích của bạn!
kenju

115
android:layout_centerInParent="true"

Điều này hoạt động khi được sử dụng với RelativeLayout nơi chiều cao và chiều rộng của bố cục được đặt thành quấn_content.


19
Điều này tập trung vào TextView, không phải văn bản trong đó.
anthropomo

2
Điều này KHÔNG hoạt động khi có từ bọc trong TextView. Văn bản sẽ có chiều rộng đầy đủ và nhiều dòng VÀ TRÁI CỨ trong phạm vi TextView. Nó sẽ xuất hiện bên trái trên màn hình. Bạn nên sử dụng "trọng lực" như được chỉ định trong các câu trả lời khác.
David Manpearl

83

Bạn cũng có thể sử dụng kết hợp:

android:gravity="left|center"

Sau đó, nếu chiều rộng của textview lớn hơn "fill_parent", văn bản vẫn sẽ được căn chỉnh sang trái (không được căn giữa như với trọng lực chỉ được đặt thành "giữa").


56

Áp dụng trọng lực:

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

Đối với ngành dọc:

txtView.setGravity(Gravity.CENTER_VERTICAL);

Trong XML:

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

42

Có hai cách để làm điều này.

Đầu tiên trong mã XML. Bạn cần chú ý tại GravityThuộc tính. Bạn cũng có thể tìm thấy thuộc tính này trong Trình chỉnh sửa đồ họa; nó có thể dễ dàng hơn EDITOR XML.

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

Đối với kịch bản cụ thể của bạn, các giá trị của trọng lực sẽ là:

center_vertical|center_horizontal

Trong trình chỉnh sửa đồ họa, bạn sẽ tìm thấy tất cả các giá trị có thể, thậm chí xem kết quả của chúng.


41

Nếu bạn đang sử dụng TableLayout, hãy đảm bảo đặt trọng lực của TableRows thành trung tâm. Nếu không nó sẽ không hoạt động. Ít nhất là nó không hoạt động với tôi cho đến khi tôi đặt trọng lực của TableRow thành trung tâm.

Ví dụ, như thế này:

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

Hấp dẫn. Phải kiểm tra xem điều đó có hợp lệ đối với linearLayout (cha mẹ TableRow) không.
Martin

38

Bạn cần đặt TextView Gravity (Center vertical & Center vertical) như thế này:

android:layout_centerHorizontal="true"   

android:layout_centerVertical="true"

Và năng động sử dụng:

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

Mã ngữ nghĩa là sai. Thay thế layout_centerhorizontallayout_centerverticalbằng layout_centerHorizontallayout_centerVertical("H" và "V" thành chữ hoa, nếu không nó sẽ không hoạt động).
yugidroid

2
layout_ * cho cha mẹ của View biết nơi nó muốn. Không có bố cục_ * cho Chế độ xem cách đặt các thành phần của nó
Dandre Allison

34

Theo ý kiến ​​của tôi,

android:gravity="center"

tốt hơn,

android:layout_centerInParent="true"

cái nào tốt hơn

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

ít nhất là để định dạng văn bản.


30

Đối với Bố cục tuyến tính: Trong XML sử dụng một cái gì đó như thế này

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

Để làm điều này trong thời gian chạy, hãy sử dụng một cái gì đó như thế này trong hoạt động của bạn

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

Đối với Bố cục tương đối: trong XML sử dụng một số thứ như thế này

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

Để làm điều này trong thời gian chạy, hãy sử dụng một cái gì đó như thế này trong hoạt động của bạ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

Sử dụng trong tệp XML.

Bố cục tập tin

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

hoặc là:

Sử dụng cái này bên trong lớp Java

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

21

Sử dụng này để bố trí tương đối

android:layout_centerInParent="true"

và cho bố cục khác

android:gravity="center" 

18

Nếu TextView'schiều cao và chiều rộng wrap contentthì văn bản trong phạm vi TextViewluôn luôn được căn giữa. Nhưng nếu TextView'schiều rộng match_parentvà chiều cao là match_parenthoặc wrap_contentsau đó bạn phải viết mã dưới đây:

Đối với 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>

Đối với tuyến tính :

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

Trong khi sử dụng trọng lực hoạt động cho TextView, có một phương pháp thay thế được triển khai trong cấp độ API 17 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Không biết sự khác biệt, nhưng nó cũng hoạt động. Tuy nhiên, chỉ dành cho API cấp 17 trở lên.


Sự khác biệt được mô tả ở đây: stackoverflow.com/questions/16196444/ Từ
jasdefer

Điều này sẽ thực sự tập trung vào văn bản trong TextView. Nếu bạn chỉ sử dụng trọng lực, có một chút dấu đệm phụ thuộc vào văn bản là gì .... Nếu bạn có một huy hiệu hình tròn nhỏ với văn bản ở trung tâm, chẳng hạn, bạn có thể thấy một sự khác biệt rất rõ ràng.
kể chuyện

14

Trong RelativeLayout, nó sẽ tốt đẹp với nó.

Và cái khác Buttonvà bất cứ điều gì khác mà bạn có thể thêm.

Sau đây làm việc độc đáo cho tôi.

<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

Cách dễ nhất (điều đáng ngạc nhiên chỉ được đề cập trong các bình luận, do đó tại sao tôi đăng bài dưới dạng câu trả lời) là:

textview.setGravity(Gravity.CENTER)

11

Bạn chỉ có thể thiết lập các gravitytextview của bạn vào CENTER.


10

Nếu bạn đang cố gắng căn giữa văn bản trên TableRow trong TableLayout, đây là cách tôi đạt được điều này:

<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

Sử dụng 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"
         />

textAlocation = "centre" sẽ không thực hiện công việc cho đến khi TextView có kích thước để khớp_parent
SAurabh

@SAurabh ví dụ trên đang hoạt động mà không có vấn đề gì.
Chathura Wijesinghe

Là nó làm việc mà không có trọng lực để cha mẹ hoặc bố trí trọng lực trong chính nó? Nó sẽ không căn chỉnh văn bản sẽ căn chỉnh văn bản trong giới hạn khung nhìn của nó, cho đến khi textView mất match_parent trong trường hợp này, nó sẽ không giống như thế này nếu không có trọng lực trong bố cục chính hoặc layout_gravity của chính nó
SAurabh

9

Đây là câu trả lời của tôi mà tôi đã sử dụng trong ứng dụng của mình. Nó hiển thị văn bản ở giữa màn hình.

<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

Nếu bạn đang sử dụng Giao diện tương đối:

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

Nếu bạn đang sử dụng linearLayout

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

8

Như nhiều câu trả lời cho thấy hoạt động tốt.

android:gravity="center"

Nếu bạn muốn tập trung vào nó theo chiều dọc:

android:gravity="center_vertical"

hoặc chỉ theo chiều ngang:

android:gravity="center_horizontal"

7

Đơn giản, trong tệp XML của bạn, đặt trọng lực của chế độ xem văn bản thành chính giữa:

<TextView
    android:gravity="center" />

7

Bạn có thể làm như thế này để lấy văn bản làm trung tâm

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

7

Chiều cao và chiều rộng của TextView được bao bọc nội dung, sau đó văn bản trong chế độ xem văn bản luôn được căn giữa, sau đó tạo trung tâm trong bố cục chính của nó bằng cách sử dụng:

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

Đối với linearLayout, mã cũng vậy:

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

và cha mẹ theo ngữ pháp là mã java RelativeLayout, lúc này sử dụng một cái gì đó như thế này trong hoạt động của bạ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

Chúng ta có thể đạt được điều này bằng nhiều cách sau: -

Phương pháp 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"
/>

Phương pháp 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"
/>

Phương pháp XML 03

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

Phương pháp 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"
/>

Phương pháp Java 01

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

Phương pháp Java 02

textview.setGravity(Gravity.CENTER);

Phương thức Java 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

6

Trọng lực TextView hoạt động theo bố trí cha mẹ của bạn.

Tuyến tính :

Nếu bạn sử dụng linearLayout thì bạn sẽ tìm thấy hai thuộc tính trọng lực android: vity & android: layout_gravity

android: vity: đại diện cho potion layout của TextView trong khi android: layout_gravity: thể hiện vị trí TextView trong chế độ xem cha.

nhập mô tả hình ảnh ở đây

Nếu bạn muốn đặt văn bản theo chiều ngang & trung tâm theo chiều dọc thì hãy sử dụng mã bên dưới

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

Giao diện tương đối :

Sử dụng RelativeLayout, bạn có thể sử dụng thuộc tính bên dưới trong TextView

android: vity = "centre" cho trung tâm văn bản trong TextView.

văn bản bên trong android: vity = "centre_horizontal" nếu bạn muốn tập trung theo chiều ngang.

văn bản bên trong android: vity = "centre_vertical" nếu bạn muốn căn giữa theo chiều dọc.

android: layout_centerInParent = "true" nếu bạn muốn TextView ở vị trí trung tâm của chế độ xem chính. android: layout_centerHTHER = "true" nếu bạn muốn TextView ở giữa theo chiều ngang của chế độ xem chính. android: layout_centerV vertical = "true" nếu bạn muốn TextView ở giữa theo chiều dọc của chế độ xem chính.

<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, bất kỳ lý do bạn quay trở lại phiên bản trước? Bản sửa đổi mà bạn hoàn nguyên là một cách thực hành tốt để những gì biên tập viên đã đề cập có thể giúp người chỉnh sửa văn bản mã hóa.
Edric

5

Hãy thử theo cách này, nó sẽ hoạt động

            <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

Trên thực tế, chúng ta có thể làm tốt hơn bằng cách loại trừ fontPadding.

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.