Питання Як прокручувати текст по горизонталі та вертикалі в TextView?


Як орієнтувати текст по горизонталі та вертикалі в a TextView, так що він з'являється саме в середині TextView в Android?


1687
2018-01-11 00:27


походження


встановіть обидві макет-ширину та макет_настрою на fill_parent, а потім встановіть гравітація на центр. Це зробить трюк - Amila
fill_parent застаріла, тому використовуйте MATCH_PARENT у макеті-ширину та макеті-висоту та встановіть тяжкість TextView до центру. - Bilal Ahmad


Відповіді:


Я припускаю, що ви використовуєте макет 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);


2654
2018-01-11 01:53



Це не спрацьовує при використанні з RelativeLayout, де висота та ширина макета встановлюються як wrap_content - Rob
@ Rob, якщо ширина і висота мають wrap_content, то, технічно, текст вже центрований. - JoJo
Якщо я хочу вирівняти TextView по відношенню до іншого вигляду, але це текст зосереджений сам по собі?
Це не працює для мене (android:gravity="center") Він все ще показується в лівій частині екрана. :( - uSeRnAmEhAhAhAhAhA
Не слід плутати android:layout_gravity="center", що робить щось інше. - Rudi Kershaw


android:gravity="center" 

Це зробить трюк


398
2018-02-08 22:54



Текстове вікно має бути match_parent або fill_parent, щоб це працювало. Якщо його обгортати вміст, то він не буде центром. - Kalel Wade
@KalelWade: центрування тексту в текстовому перегляді за допомогою wrap_content взагалі не має сенсу. Може бути, ви маєте намір зосереджувати текстовий вигляд у батьківському представленні, і в цьому випадку ви просто поставите цей рядок у батьківський. - Mooing Duck
@ Mooing Duck Таким чином, причина не використовувати обгортання контенту - це не має сенсу. Але коли ви справляєтесь і вставляєте або просто кидаєтесь, ви не можете поставити два та два разом. Ось чому я згадав це. - Kalel Wade
якщо TextView з шириною та висотою дорівнює "wrap_content" знаходиться всередині LinearLayout з шириною та висотою "match_parent", то вам потрібно встановити макет_гравитації Linear_layout. - Faisal Naseer
@ MooingDuck, коли висота є "wrap_content", а гравітація - "center_vertical", вона малює в Design (попередній перегляд) в центрі, але в пристрої вона розташована вгорі. Зробіть висоту "match_parent" і встановіть гравітацію на "center_vertical" або "center". - CoolMind


Ви також можете налаштувати його динамічно за допомогою:

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

268
2017-11-21 12:25



Або просто textview.setGravity (Gravity.CENTER); - Amplify91
Які критерії судження вирішують, яким чином вибрати, писати в xml або писати в файл Java? - phi
@Кеню, якщо ви хочете, щоб його було легко редагувати, і значення не зміниться під час виконання: XML. Якщо потрібно змінити значення в реальному часі (наприклад, змінити вирівнювання, коли користувач натискає кнопку), ви можете зробити це лише за допомогою Java. - Gustavo Maciel
@GustavoMaciel так, в основному xml, якщо це не потрібно буде змінювати динамічно ... Тепер я отримав його. Дякую за вашу просту та корисну відповідь! - phi
це щиро дякую - Moritz Schmidt


android:layout_centerInParent="true"

Це працює при використанні з RelativeLayout, де висота та ширина макета встановлюються як wrap_content.


97
2017-11-11 00:58



Тут розташовується TextView, а не текст у ній. - anthropomo
Це НЕ працює, коли є словотворіння в TextView. Текст матиме повну ширину та багато рядків, а ліву - вирівняно в межах TextView. На дисплеї з'явиться ліва-виправдана. Ви повинні використовувати "тяжкість", як вказано в інших відповідях. - David Manpearl


Ви також можете використовувати комбінацію:

android:gravity="left|center"

Тоді, якщо ширина тексту в тексті більше, ніж "fill_parent", текст все одно буде вирівняно ліворуч (не центрований, оскільки гравітація встановлена ​​лише в "center").


68
2018-01-01 20:11





Застосувати тяжкість:

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

44
2018-05-30 05:34





Якщо ви використовуєте 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>

35
2018-05-13 11:57



Цікаво. Потрібно перевірити, чи є це дійсним для LinearLayout (батьківський файл TableRow). - Martin


Вам потрібно встановити Гравітація TextView (Центральний горизонтальний та вертикальний центр) виглядає так:

android:layout_centerHorizontal="true"   

і

android:layout_centerVertical="true"

І динамічно використовуючи:

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

33
2018-05-15 05:03



Семантика коду неправильна. Замініть layout_centerhorizontal і layout_centervertical по layout_centerHorizontal і layout_centerVertical ("H" та "V" у верхньому регістрі, інакше він не буде працювати). - yugidroid
layout_ * повідомляє батьків View, де він хоче бути. Без макета_ * вказується спосіб розміщення компонентів - Dandre Allison


Існує два способи цього зробити.

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

У графічному редакторі ви знайдете всі можливі значення, навіть побачите їх результати.


32
2017-10-17 12:11





На мою думку,

android:gravity="center"

краще, ніж

android:layout_centerInParent="true"

що краще, ніж

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

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


29
2017-07-16 04:28





Для лінійної макета: У 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);

26
2018-01-03 03:58