Как мне центрировать текст по горизонтали и вертикали в TextView?

StackOverflow https://stackoverflow.com/questions/432037

  •  08-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

android:gravity="center" 

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

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

textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
android:layout_centerInParent="true"

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

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

android:gravity="left|center"

Затем, если ширина текстового представления больше, чем " fill_parent " текст будет по-прежнему выровнен по левому краю (не по центру, как при гравитации, установленной только на «центр»).

Применить гравитацию:

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

Если вы используете TableLayout, убедитесь, что гравитация TableRows также установлена в центр.Иначе это не сработает.По крайней мере, у меня это не сработало, пока я не установил гравитацию стола в центр.

Например, вот так:

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

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

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

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

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

android:layout_centerHorizontal="true"   

и

android:layout_centerVertical="true"

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

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

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

android:gravity="center"

лучше чем,

android:layout_centerInParent="true"

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

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

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

Для линейного макета: В 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);

Используйте в 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);

Используйте это для относительного расположения

android:layout_centerInParent="true"

и для другого макета

android:gravity="center" 

Хотя использование гравитации работает для TextView, в API уровня 17 реализован альтернативный метод -

textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);

Не знаю разницы, но это тоже работает. Однако только для уровня API 17 или выше.

Если высота и ширина TextView равны содержимому переноса , то текст в TextView всегда центрируется. Но если ширина TextView равна 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>

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

Самый простой способ (который удивительно упоминается только в комментариях, поэтому я и публикую его в качестве ответа):

textview.setGravity(Gravity.CENTER)

Вы можете просто установить гравитацию вашего текстового представления в CENTER .

Если вы пытаетесь центрировать текст на 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>

Вот мой ответ, который я использовал в своем приложении. Он показывает текст в центре экрана.

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

Если вы используете относительную компоновку:

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

Как показывают многие ответы выше, все работает хорошо.

android:gravity="center"

Если вы хотите отцентрировать его по вертикали:

android:gravity="center_vertical"

или только горизонтально:

android:gravity="center_horizontal"

Просто в своем XML-файле установите гравитацию textview в центр:

<TextView
    android:gravity="center" />

Вы можете сделать это, чтобы центрировать текст

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

Мы можем достичь этого несколькими способами: -

  

Метод 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);

Высота и ширина 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>

и программным родителем является Java-код 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);

TextView gravity работает в соответствии с вашим родительским макетом.

Линейное описание:

Если вы используете LinearLayout, то вы найдете два атрибута gravity android:gravity и android:layout_gravity

android:гравитация :представлять макет внутреннего текста TextView во время работы android: layout_gravity :представляет позицию TextView в родительском представлении.

enter image description here

Если вы хотите установить текст по горизонтали и вертикали по центру, то используйте приведенный ниже код this

<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="center" для центра текста в 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>

android: gravity = " center_horizontal для выравнивания текста по центру по горизонтали. android: gravity = " center_vertical " для выравнивания текста по центру по вертикали. android: gravity = " center " для выравнивания текста по центру как по вертикали, так и по горизонтали.

<TextView
        android:layout_width="match_parent"
        android:gravity="center_horizontal|center_vertical"
        android:layout_height="match_parent" />

Попробуйте, это сработает

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

используйте приведенный ниже код в XML, это сработало для меня, вы можете изменить ориентацию, это будет в центре

<LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:background="@color/colorPrimaryDark"
        android:gravity="center"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/id_text"
            android:layout_width="wrap_content"
            android:textSize="18sp"
            android:textColor="@android:color/white"
            android:textStyle="normal"
            android:layout_height="wrap_content"
            android:text="centre me"/>
    </LinearLayout>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top