Як я центрую текст по горизонталі та вертикалі в точці TextView
так, щоб він відображався точно посередині значка TextView
в Android
?
Як я центрую текст по горизонталі та вертикалі в точці 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_horizontal
відповідно до своїх потреб.
і як @stealthcopter прокоментував Java: .setGravity(Gravity.CENTER);
android:gravity="center"
). Це все ще відображається в лівій частині екрана. :(
android:layout_gravity="center"
, що робить щось інше.
android:gravity="center"
Це зробить трюк
Ви також можете його налаштувати динамічно, використовуючи:
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
android:layout_centerInParent="true"
Це працює, коли використовується з RelativeLayout, де висота та ширина макета встановлені на wrap_content.
TextView
. Текст буде виправданим на повну ширину та багаторядковий та лівий у межах TextView
. На дисплеї це відобразиться зліва. Ви повинні використовувати "гравітацію", як зазначено в інших відповідях.
Застосування сили тяжіння:
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"
/>
Є два способи зробити це.
Перший у 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
У графічному редакторі ви знайдете всі можливі значення, навіть побачите їх результати.
Якщо ви використовуєте 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>
Вам потрібно встановити 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" на великі регістри, інакше це не буде працювати).
На мою думку,
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'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>
Під час використання гравітаційних робіт для TextView існує альтернативний метод, реалізований на рівні 17 API -
textView.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);
Не знаю різниці, але це теж працює. Однак лише для рівня API 17 або вище.
В 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)
Ви можете просто встановити перегляд gravity
тексту 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>
Використовуйте 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"
/>
Ось моя відповідь, яку я використав у своєму додатку. Він відображає текст у центрі екрана.
<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"/>
Просто у своєму XML-файлі встановіть гравітацію перегляду тексту на центр:
<TextView
android:gravity="center" />
Ви можете зробити так, щоб отримати текст по центру
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="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>
і програматично батьків є 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);
Ми можемо досягти цього кількома способами:
Метод 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 працює відповідно до вашого батьківського макета.
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>
Спробуйте таким чином, це спрацює
<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>