Как мне центрировать текст по горизонтали и вертикали в TextView?
Вопрос
Как мне отцентрировать текст по горизонтали и вертикали в 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 в родительском представлении.
Если вы хотите установить текст по горизонтали и вертикали по центру, то используйте приведенный ниже код 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>