2011-01-31 2 views
53

Кто-нибудь знает, как обернуть текст в TextView в платформе Android. Если текст в текстовом режиме превышает длину экрана, он должен отображаться во второй строке.как обернуть текст в textview в android

Я искал и попытался следующее:

android:scrollHorizontally="false", 
android:inputType="textMultiLine", 
android:singleLine="false" 

Но ни одна работа ..

Может кто-нибудь подскажет, как я могу это сделать .. я относительно новым для андроид платформы ..

+3

TextViews должен содержать текст по умолчанию. Можете ли вы опубликовать весь свой макет? – danh32

+0

Насколько это возможно, Textview внутри таблицы? Если так, у меня есть ответ для вас. – JohnFx

ответ

0

Вы должны добавить TextView в ScrollView с чем-то вроде этого:

<ScrollView android:id="@+id/SCROLL_VIEW" 
android:layout_height="150px" 
android:layout_width="fill_parent"> 

<TextView 
    android:id="@+id/TEXT_VIEW" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" /> 
</ScrollView> 
+4

Спасибо за ваш ответ. Но моя цель - обернуть текст, когда он превышает длину строки, чтобы не поставить горизонтальный скроллер. – Sameer

9

Вы должны использовать 2 параметры:

  • android:ellipsize="none": текст не режут по ширине TextView

  • android:scrollHorizontally="false" текст обтекает на столько строк, сколько необходимо

+3

Это не работает для меня. (FWIW, у меня есть TextView в TableRow в TableLayout.) – aij

0

достаточно странно - Я создал свой TextView в Code, и он завернулся - несмотря на то, что я ничего не устанавливал, кроме стандартных вещей, - но убедитесь сами:

LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, 
      LayoutParams.WRAP_CONTENT); 
childParams.setMargins(5, 5, 5, 5); 

Label label = new Label(this); 
label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label"); 
label.setLayoutParams(childParams); 

Как вы можете видеть из определения params, я использую LinearLayout. Класс Label просто расширяет TextView - ничего не делает, кроме установки размера шрифта и цвета шрифта.

При запуске его в эмуляторе (уровень API 9) он автоматически обертывает текст по 3 строкам.

+0

Обратите внимание на использование этого кода 'LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams (LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);'. Скорее всего, это делает обертывание, которое вы считаете «автоматическим» – nemesisfixx

5

Это должно устранить вашу проблему: android:layout_weight="1".

+0

Это просто заставляет TextView расширяться, чтобы сделать как можно больше места, что равно тому, как установить высоту на 'match_parent'. Не то же самое, что и OP. –

+0

В случае TableLayout 'layout_weight =" 1 "' исправил проблему для меня. Однако мой TableRow, содержащий TextView, имел значение 'layout_height' для определенного значения. Может быть, это будет полезно для кого-то – kit

43

Для меня эта проблема встречается только на Android < 4,0

Комбинация параметров, которые я использовал, были:

android:layout_weight="1" 
android:ellipsize="none" 
android:maxLines="100" 
android:scrollHorizontally="false" 

В MaxLines COUNT, казалось, случайный окончательный кусок, который сделал мой TextView обертку.

+7

Теперь я знаю его старую нить, но думал, что опубликую мои выводы. Я использовал только «android: maxLines», а затем он завернул мой текст. Cheer @Guykun – StuStirling

+0

Опять же, это равносильно простому установлению высоты TextView для 'match_parent', что не то же самое, что увеличение высоты TextView для включения дополнительных строк. –

5

ОК, ребята, правда где-то посередине, вы должны увидеть проблему с точки зрения родителя и ребенка. Решение ниже работает только при включенном режиме вертушки = dialog независимо от версии Android (не проблемы там .. протестировал его в VD и желания с Android => 2.2):

  1. .Набора вы Прядильщики (родительский) режим, как:

    android:spinnerMode="dialog" 
    
  2. Установите TextView (в ребенке пользовательского) свойства в:

    android:layout_weight="1" 
    android:ellipsize="none" 
    android:maxLines="100" 
    android:scrollHorizontally="false" 
    

Я надеюсь, что это работает для вас также ,

+0

Пробовал так много вещей, чтобы заставить его работать в режиме «выпадающего списка», но ничего не получилось. Теперь остановился на режиме «диалога». – Mangesh

1

Установив android:maxEms в заданное значение вместе с android:layout_weight="1", он заставит TextView обернуть, как только он достигнет заданной длины ems.

0

Я использую Android 2.2, и мой текст автоматически перейдет к следующей строке, если она превышает экран.

Если вы хотите, чтобы текст перешел к следующей строке до конца экрана, просто добавьте (просто введите собственное значение dp). Это будет полезно, если у вас есть изображение справа от текста.

android:layout_marginRight="52dp" 
24

Для случая, когда TextView находится внутри TableLayout, решение установить android:shrinkColumns="1" на TableLayout. (Замените 1 с номером столбца, в котором находится TextView, который вы хотите обернуть. (0-indexed))

AFAICT, никакие другие атрибуты не нужны на TextView.

Для других случаев см. Другие ответы здесь.

FWIW, я первоначально получил его, чтобы разобраться в работе с

<TextView 
    android:id="@+id/inventory_text" 
    android:layout_width="fill_parent" 
    android:layout_weight="1" 
    android:width="0dp" 

но что привело к некоторым дополнительным пустое пространство в нижней части диалогового окна все это было в.

+0

Это то, что я искал! В противном случае мои слова отрезаны –

-1

Я знаю, что уже поздно , но это может помочь кому-то другому. Просто установите ширину на 0dp

<TextView 
     android:layout_width="0dp" 
     .../> 
+1

Это должно быть шуткой, не так ли? –

+0

Нет, это не шутка, это сработало для меня ... !!! –

0

Попробуйте подход @ Guykun и убедитесь, что ширина родителей не предназначена для обертывания содержимого. Это то, чего мне не хватало.

-1

Его действительно очень легко. Просто напишите: + "\ n", где бы вы ни захотели сложить слова

+0

есть много проблем с этим, не в последнюю очередь из которых обрабатывает динамический текст из ответов Net API, базы данных, локализация ... –

2

В Android Studio 2.2.3 под объектом inputType есть свойство под названием textMultiLine. Выбрав этот параметр, я выбрал для себя аналогичную проблему. Надеюсь, это поможет.

+0

Это для EditText, а не Textview –

0

У меня была та же проблема. После изменения сделали его работу -

android:layout_width="wrap_content" 

многоточие, MaxLines или layout_weight - все не имеет никакого значения. Примечание. Ширина родительского элемента также задается как wrap_content.

8

Constraint Layout

<TextView 
android:id="@+id/some_textview" 
android:layout_width="0dp" 
android:layout_height="wrap_content" 

app:layout_constraintLeft_toLeftOf="@id/textview_above" 
app:layout_constraintRight_toLeftOf="@id/button_to_right"/> 
  • Убедитесь, что ваша ширина макета равна нулю
  • влево/вправо ограничения определяются
  • высота макета wrap_content позволяет расширение вверх/вниз.
  • Комплект android:maxLines="2" для предотвращения вертикального расширения (например, 2)
  • Эллипсы - это проблема. хорошая идея с макс линий android:ellipsize="end"

0dp ширина позволяет влево/вправо ограничения, чтобы определить, насколько широк ваш виджет.

Установка ограничений влево/вправо устанавливает фактическую ширину вашего виджета, в пределах которого ваш текст будет обернут.

Constraint Layout docs

+0

Да! Это точно, как это работает! Просто убедитесь, что вы задали ширину 0dp –

0

Просто работал над TextView внутри макета внутри RecyclerView. У меня был отрезанный текст, например, для Read this message, я видел: Read this. Я попытался установить android:maxLines="2" на TextView, но ничего не изменилось. Однако android:lines="2" привел к Read this на первой линии и message на 2-й.

Смежные вопросы