Jak wyśrodkować tekst poziomo i pionowo w TextView?

2024

Jak wyśrodkować tekst poziomo i pionowo w a TextView, aby pojawił się dokładnie na środku TextVieww Android?

pupeno
źródło
7
ustaw zarówno layout_width, jak i layout_height na fill_parent, a następnie ustaw grawitację na środek. To
załatwi sprawę
2
fill_parent jest teraz przestarzałe, więc użyj MATCH_PARENT w layout_width i layout_height i ustaw grawitację TextView na środek.
Bilal Ahmad

Odpowiedzi:

3084

Zakładam, że używasz układu XML.

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

Możesz także użyć grawitacji center_verticallub center_horizontalzgodnie z potrzebami.

i jak skomentował @stealthcopter w java: .setGravity(Gravity.CENTER);

Rachunek
źródło
58
Nie działa to w połączeniu z RelativeLayout, w którym wysokość i szerokość układu są ustawione na wrap_content
Rob
96
@Rob, jeśli szerokość i wysokość mają wartość wrap_content, to technicznie tekst jest już wyśrodkowany.
JoJo,
3
Jeśli chcę wyrównać TextView względem innego widoku, ale czy tekst jest wyśrodkowany sam w sobie?
9
To nie działa dla mnie ( android:gravity="center"). Nadal pokazuje się po lewej stronie ekranu. :(
uSeRnAmEhAhAhAhAhA
30
Nie mylić z tym android:layout_gravity="center", co robi coś innego.
Rudi Kershaw
444
android:gravity="center" 

To załatwi sprawę

Drelich
źródło
32
Aby to działało, widok tekstu musi być zgodny z rodzicem lub rodzicem z rodzicem. Jeśli zawartość zawinięcia nie zostanie wyśrodkowana.
Kalel Wade,
7
@KalelWade: centrowanie tekstu w widoku tekstowym za pomocą wrap_content nie ma żadnego sensu. Być może zastanawiasz się nad wyśrodkowaniem widoku tekstu w widoku nadrzędnym, w takim przypadku po prostu wstawiasz tę linię do elementu nadrzędnego.
Mooing Duck
@Mooing Duck Tak więc powód, dla którego nie należy używać zawartości opakowania - nie ma sensu. Ale kiedy albo kopiujesz i wklejasz, albo po prostu spiesz się, nie możesz połączyć dwóch i dwóch. Dlatego o tym wspomniałem.
Kalel Wade,
1
jeśli TextView o szerokości i wysokości równej „wrap_content” znajduje się wewnątrz LinearLayout z szerokością i wysokością „match_parent”, musisz ustawić układ_grawitacji dla Linear_layout.
Faisal Naseer
1
@MooingDuck, gdy wysokość to „wrap_content”, a grawitacja to „center_vertical”, rysuje Design (podgląd) jako wyśrodkowany, ale w urządzeniu ustawia się go do góry. Zrób więc wysokość „match_parent” i ustaw grawitację na „center_vertical” lub „center”.
CoolMind
296

Możesz również skonfigurować go dynamicznie, używając:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
zeevb
źródło
141
Lub po prostu textview.setGravity (Gravity.CENTER);
Amplify91
Jakie są kryteria oceny, aby zdecydować, który sposób wybrać, pisać w formacie XML lub pisać w pliku Java?
kenju,
2
@Kenju, jeśli chcesz, aby można go było łatwo edytować, a wartość nie zmieni się podczas działania: XML. Jeśli musisz zmienić wartość w czasie rzeczywistym (na przykład zmień wyrównanie, gdy użytkownik naciśnie przycisk), możesz to zrobić tylko przez Javę.
Gustavo Maciel
2
@GustavoMaciel, więc w zasadzie xml, chyba że trzeba go dynamicznie modyfikować ... Teraz go mam. Dzięki za prostą i przydatną odpowiedź!
kenju,
114
android:layout_centerInParent="true"

Działa to w połączeniu z RelativeLayout, w którym wysokość i szerokość układu są ustawione na wrap_content.

Itherese
źródło
19
Centruje to TextView, a nie tekst w nim.
antropomo
2
To NIE działa, gdy w pliku jest zawijanie słów TextView. Tekst będzie w pełnej szerokości i będzie zawierał wiele wierszy, a LEWO będzie wyjustowany TextView. Na wyświetlaczu pojawi się z wyrównaniem do lewej. Powinieneś użyć „grawitacji” określonej w innych odpowiedziach.
David Manpearl
82

Możesz także użyć kombinacji:

android:gravity="left|center"

Następnie, jeśli szerokość widoku tekstu jest większa niż „fill_parent”, tekst będzie nadal wyrównany do lewej (nie wyśrodkowany, jak w przypadku grawitacji ustawionej tylko na „środek”).

Szorstki
źródło
56

Zastosuj grawitację:

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

Dla pionu:

txtView.setGravity(Gravity.CENTER_VERTICAL);

W XML:

<TextView      
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:gravity="center"
    android:text="@string/Hello_World"        
/>
Gaganpreet Singh
źródło
42

Można to zrobić na dwa sposoby.

Pierwszy w kodzie XML. Musisz zwrócić uwagę na GravityAtrybut. Ten atrybut można również znaleźć w Edytorze graficznym; może być łatwiejsze niż EDYTOR XML.

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

W przypadku konkretnego scenariusza wartości grawitacji będą następujące:

center_vertical|center_horizontal

W edytorze graficznym znajdziesz wszystkie możliwe wartości, a nawet zobaczysz ich wyniki.

Cristiano Guerra
źródło
41

Jeśli używasz TableLayout, upewnij się, że grawitacja TableRows również jest wyśrodkowana. W przeciwnym razie to nie zadziała. Przynajmniej nie działało to ze mną, dopóki nie ustawiłem grawitacji TableRow na środku.

Na przykład:

<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
źródło
Ciekawy. Muszę sprawdzić, czy dotyczy to również LinearLayout (elementu nadrzędnego TableRow).
Martin
38

Musisz ustawić TextView Gravity (środek w poziomie i środek w pionie) w następujący sposób:

android:layout_centerHorizontal="true"   

i

android:layout_centerVertical="true"

I dynamicznie za pomocą:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
NagarjunaReddy
źródło
Semantyka kodu jest niepoprawna. Zamień layout_centerhorizontali layout_centerverticalprzez layout_centerHorizontali layout_centerVertical(„H” i „V” na wielkie litery, w przeciwnym razie nie zadziała).
yugidroid
2
layout_ * mówi rodzicowi View, gdzie chce być. Bez układu_ * mówi Widokowi, jak umieścić jego komponenty
Dandre Allison,
34

W mojej opinii,

android:gravity="center"

jest lepszy niż,

android:layout_centerInParent="true"

co jest lepsze niż

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

przynajmniej do formatowania tekstu.

epopeja42
źródło
30

Dla układu liniowego: w XML użyj czegoś takiego

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

Aby to zrobić w czasie wykonywania, użyj czegoś takiego w swojej aktywności

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

Dla układu względnego: w XML użyj czegoś takiego

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

Aby to zrobić w czasie wykonywania, użyj czegoś takiego w swojej aktywności

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
źródło
24

Użyj w pliku XML.

Plik układu

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

lub:

Użyj tego w klasie Java

TextView textView =(TextView)findViewById(R.id.texviewid);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
venu
źródło
21

Użyj tego dla względnego układu

android:layout_centerInParent="true"

i dla innego układu

android:gravity="center" 

źródło
18

Jeśli TextView'swysokość i szerokość są wrap contenttekstem, wówczas tekst TextViewzawsze będzie wyśrodkowany. Ale jeśli TextView'sszerokość match_parenti wysokość to match_parentczy wrap_contentpotem trzeba napisać poniższy kod:

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

W przypadku 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
źródło
17

Podczas korzystania z grawitacji działa w TextView, istnieje alternatywna metoda zaimplementowana na poziomie API 17 -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Nie znam różnicy, ale to też działa. Jednak tylko dla API poziomu 17 lub wyższego.

Nowicjusz
źródło
Różnica jest opisana tutaj: stackoverflow.com/questions/16196444/...
jasdefer
To naprawdę wyśrodkuje tekst w TextView. Jeśli używasz tylko grawitacji, w zależności od tekstu jest trochę spływu końcowego. Jeśli na przykład masz małą okrągłą plakietkę z tekstem pośrodku, możesz zobaczyć bardzo oczywistą różnicę.
tarrball,
14

W RelativeLayoutbędzie miło z tym.

I jeszcze jedno Buttoni wszystko, co możesz dodać.

Poniższe działa dla mnie ładnie.

<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
źródło
11

Najłatwiejszym sposobem (który jest zaskakująco wspomniany tylko w komentarzach, dlatego zamieszczam jako odpowiedź) jest:

textview.setGravity(Gravity.CENTER)
użytkownik1
źródło
11

Możesz po prostu ustawić gravityswój widok tekstu na CENTER.

note-knotz
źródło
10

Jeśli próbujesz wyśrodkować tekst na TableRow w TableLayout, oto jak to osiągnąłem:

<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
źródło
10

Posługiwać się 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
źródło
textAlignment = "center" nie wykona zadania, dopóki TextView nie będzie mieć wymiarów do match_parent
SAurabh
Powyższy przykład @SAurabh działa bez żadnych problemów.
Chathura Wijesinghe
czy działa bez grawitacji w stosunku do grawitacji rodzica lub układu? Nie wyrównywanie tekstu wyrówna tekst w obrębie jego granic widoku, więc dopóki textView nie przyjmie match_parent w tym przypadku, nie będzie to wyglądać tak bez grawitacji w jej układzie macierzystym lub samej
układ_grawitacji
9

Oto moja odpowiedź, której użyłem w mojej aplikacji. Pokazuje tekst na środku ekranu.

<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
źródło
9

Jeśli używasz układu względnego:

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

Jeśli korzystasz z LinearLayout

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/stringname"
    android:layout_gravity="center"/>
Niranjan
źródło
8

Jak sugeruje wiele odpowiedzi powyżej, działa dobrze.

android:gravity="center"

Jeśli chcesz wyśrodkować go tylko pionowo:

android:gravity="center_vertical"

lub tylko poziomo:

android:gravity="center_horizontal"
rgamber
źródło
7

Po prostu w pliku XML ustaw grawitację widoku tekstu na środek:

<TextView
    android:gravity="center" />
Mansoor Ahmad Samar
źródło
7

Możesz to zrobić, aby wyśrodkować tekst

<TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center" />
Kamlakar Kate
źródło
7

Wysokość i szerokość TextView to zawijanie zawartości, a następnie tekst w widoku tekstowym jest zawsze wyśrodkowany, a następnie wyśrodkuj układ macierzysty, używając:

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

W przypadku LinearLayout również kod jest taki sam:

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

a nadprogramowo nadrzędny jest kod Java RelativeLayout. W czasie wykonywania użyj czegoś takiego w swojej aktywności

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
źródło
6

Możemy to osiągnąć na wiele sposobów:

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

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

Metoda XML 03

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

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

Metoda Java 01

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

Metoda Java 02

textview.setGravity(Gravity.CENTER);

Metoda Java 03

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
ArghadipDasCEO
źródło
6

Grawitacja TextView działa zgodnie z układem nadrzędnym.

Układ liniowy :

Jeśli użyjesz LinearLayout, znajdziesz dwa atrybuty grawitacji android: gravity i android: layout_gravity

android: grawitacja: reprezentuje miksturę układu tekstu wewnętrznego TextView, podczas gdy android: grawitacja układu: reprezentuje pozycję TextView w widoku rodzica.

wprowadź opis zdjęcia tutaj

Jeśli chcesz ustawić tekst poziomo i pionowo na środku, użyj poniższego kodu

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

Za pomocą RelativeLayout można użyć właściwości poniżej w TextView

android: gravity = "center" dla centrum tekstowego w TextView.

android: gravity = "center_horizontal" tekst wewnętrzny, jeśli chcesz wyśrodkować go poziomo.

android: gravity = "center_vertical" tekst wewnętrzny, jeśli chcesz wyśrodkować go pionowo.

android: layout_centerInParent = "true", jeśli chcesz TextView w środkowej pozycji widoku nadrzędnego. android: layout_centerHorizontal = "true", jeśli chcesz TextView w poziomo pośrodku widoku rodzica. android: layout_centerVertical = "true", jeśli chcesz TextView w pionowym środku widoku rodzica.

<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
źródło
Btw, z jakiegoś powodu cofnąłeś się do poprzedniej wersji? Wersja, którą cofnąłeś, jest dobrą praktyką, tak jak wspomniała redaktor, może pomóc edytorom tekstu w kodowaniu.
Edric
5

Wypróbuj w ten sposób, to zadziała

            <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>
Wspólnota
źródło
5

W rzeczywistości możemy to zrobić lepiej, wykluczając fontPadding.

<TextView
  android layout_height="wrap_content"
  android layout_height="wrap_content"
  android:includeFontPadding="false"
  android:textAlignment="center"
/>
Seanghay
źródło