Як центрувати текст горизонтально та вертикально в TextView?


2024

Як я центрую текст по горизонталі та вертикалі в точці TextViewтак, щоб він відображався точно посередині значка TextViewв Android?


7
встановіть як layout_width, так і layout_height для fill_parent, а потім встановіть тяжкість у центр. Це зробить трюк
Аміла,

2
Тепер функція fill_parent застаріла, тому використовуйте MATCH_PARENT у layout_width та layout_height та встановіть тяжкість TextView до центру.
Білал Ахмад

Відповіді:


3084

Я припускаю, що ви використовуєте макет 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", що робить щось інше.
Руді Кершо

444
android:gravity="center" 

Це зробить трюк


32
Щоб це працювало, перегляд тексту має бути відповідним або прозорим. Якщо його вміст обгортання, то він не буде по центру.
Калель Вейд

7
@KalelWade: центрування тексту в текстовому перегляді з wrap_content взагалі не має сенсу. Можливо, ви замислюєтесь про те, щоб зосереджувати перегляд тексту у батьківському перегляді, і в цьому випадку ви просто вкладаєте цей рядок у батьківський вигляд.
Mooing Duck

@Mooing Duck Причина не використовувати контент для обгортання - це не має сенсу. Але коли ви або вправляєтесь і вставляєте або просто поспішаєте, ви можете не скласти два і два разом. Ось чому я це згадав.
Калель Вейд

1
якщо TextView з шириною та висотою, рівними "wrap_content", знаходиться всередині LinearLayout із шириною та висотою "match_parent", то вам потрібно встановити макет_гравітації Linear_layout.
Faisal Naseer

1
@MooingDuck, коли висота "wrap_content", а гравітація "center_vertical", вона малюється в Design (попередньому перегляді) у центрі, але в пристрої вона розташована у верхній частині. Тому зробіть висоту "match_parent" і встановіть гравітацію на "center_vertical" або "center".
CoolMind

296

Ви також можете його налаштувати динамічно, використовуючи:

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

114
android:layout_centerInParent="true"

Це працює, коли використовується з RelativeLayout, де висота та ширина макета встановлені на wrap_content.


19
Це центрує TextView, а не текст у ньому.
anthropomo

2
Це НЕ працює, коли в програмі є обгортання слів TextView. Текст буде виправданим на повну ширину та багаторядковий та лівий у межах TextView. На дисплеї це відобразиться зліва. Ви повинні використовувати "гравітацію", як зазначено в інших відповідях.
Девід Манперл

82

Ви також можете використовувати комбінацію:

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.

<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).
Мартін

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" на великі регістри, інакше це не буде працювати).
югідроїд

2
layout_ * повідомляє батьківському погляду View, де він хоче бути. Без layout_ * розповідає Погляду, як розмістити його компоненти
Dandre Allison

34

На мою думку,

android:gravity="center"

краще, ніж,

android:layout_centerInParent="true"

що краще, ніж

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

принаймні для форматування тексту.


30

Для лінійного макета: у 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тоді вам потрібно написати код нижче:

Для відносного макета:

<?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 існує альтернативний метод, реалізований на рівні 17 API -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Не знаю різниці, але це теж працює. Однак лише для рівня API 17 або вище.


Різниця описана тут: stackoverflow.com/questions/16196444 / ...
jasdefer

Це по-справжньому центрує текст у TextView. Якщо ви просто використовуєте гравітацію, є трохи затримки накладки залежно від тексту .... Якщо, наприклад, у вас є невеликий значок кола з текстом у центрі, ви можете побачити дуже очевидну різницю.
тарбол

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 = "центр" не виконає роботу, поки TextView не має розмірів, щоб відповідати прозорому
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

Ви можете зробити так, щоб отримати текст по центру

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

7

Висота та ширина 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 java-кодом, який у час виконання використовує щось подібне у вашій діяльності

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, ви знайдете два атрибута тяжкості андроїд: гравітація та андроїд: layout_gravity

android: gravity: представляють зілля макета внутрішнього тексту 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, ви можете використовувати властивість нижче в TextView

android: gravity = "центр" для текстового центру в TextView.

android: gravity = "center_horizontal" внутрішній текст, якщо потрібно горизонтально по центру.

android: gravity = "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>

До речі, з якої причини ти відмовився від попередньої редакції? Версія, яку ви повернули, є хорошою практикою, тому що те, що згадував редактор, може допомогти текстовим редакторам з кодуванням.
Едрік

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

Насправді ми можемо зробити краще, виключивши шрифтPadding.

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.