Как центрировать текст по горизонтали и вертикали в TextView? - PullRequest
1848 голосов
/ 11 января 2009

Как отцентрировать текст по горизонтали и вертикали в TextView, чтобы он отображался точно в середине TextView в Android?

Ответы [ 64 ]

2861 голосов
/ 11 января 2009

Я предполагаю, что вы используете макет XML.

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

Вы также можете использовать гравитацию center_vertical или center_horizontal в соответствии с вашими потребностями.

и как прокомментировал @stealthcopter в яве: .setGravity(Gravity.CENTER);

421 голосов
/ 09 февраля 2010
android:gravity="center" 

Это сделает свое дело

284 голосов
/ 21 ноября 2009

Вы также можете настроить его динамически, используя:

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
107 голосов
/ 11 ноября 2011
android:layout_centerInParent="true"

Это работает при использовании с RelativeLayout, где высота и ширина макета установлены на wrap_content.

76 голосов
/ 02 января 2013

Вы также можете использовать комбинацию:

android:gravity="left|center"

Тогда, если ширина textview больше, чем "fill_parent", текст все равно будет выровнен по левому краю (не по центру, как если бы гравитация была установлена ​​только в "center").

51 голосов
/ 30 мая 2013

Применить силу тяжести:

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"        
/>
38 голосов
/ 13 мая 2011

Если вы используете 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>
38 голосов
/ 17 октября 2014

Есть два способа сделать это.

Первый в 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

В графическом редакторе вы найдете все возможные значения, даже увидите их результаты.

36 голосов
/ 15 мая 2012

Вам необходимо установить TextView Gravity (по центру по горизонтали и по центру по вертикали) следующим образом:

android:layout_centerHorizontal="true"   

и

android:layout_centerVertical="true"

И динамически используя:

textview.setGravity(Gravity.CENTER);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
30 голосов
/ 16 июля 2012

На мой взгляд,

android:gravity="center"

лучше чем,

android:layout_centerInParent="true"

что лучше, чем

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...