- TextView
- Программная установка текста
- Атрибуты
- Программная установка фона
- Реагируем на событие onClick
- Многострочный текст
- Увеличиваем интервалы между строками
- Бой с тенью
- Создание ссылок автоматом
- Совет: Используйте полупрозрачность с умом
- Выделить текст для копирования
- how to wrap text in textview in android
- 16 answers
- Constraint Layout
- How to wrap text in textview in Android
- 18 Answers 18
- Constraint Layout
TextView
Компонент TextView предназначен для отображения текста без возможности редактирования его пользователем, что видно из его названия (Text — текст, view — просмотр).
Находится в разделе Texts.
TextView — один из самых используемых компонентов. С его помощью пользователю удобнее ориентироваться в программе. По сути, это как таблички: Руками не трогать, По газону не ходить, Вход с собаками воспрещен, Часы работы с 9.00 до 18.00 и т.д., и служит для представления пользователю описательного текста.
Для отображения текста в TextView в файле разметки используется атрибут android:text, например:
Такой подход является нежелательным. Рекомендуется всегда использовать текстовые ресурсы. В будущем эта привычка позволит вам обеспечить многоязыковую поддержку:
Программная установка текста
Программно текст можно задать методом setText():
Атрибуты
Для всех вышеперечисленных атрибутов в классе TextView есть соответствующие методы для чтения или задания соответствующих свойств.
Программно установим размеры текста при помощи setTextSize() с различными единицами измерения.
По умолчанию у компонентов TextView отсутствует фоновый цвет. Чтобы задать цвет, укажите значение Drawable для атрибута android:background. В качестве значения Drawable может использоваться изображение или XML-представление фигуры, включающий ресурс Drawable (поместить в папку res/drawable).
Программная установка фона
В некоторых случаях программисты из-за невнимательности неправильно меняют фон элемента программным способом и удивляются, почему ничего не работает.
Предположим, у вас определён в ресурсах зелёный цвет:
Следующий код будет ошибочным:
Нужно так (два варианта):
Реагируем на событие onClick
Если вы хотите, чтобы TextView обрабатывал нажатия (атрибут android:onClick), то не забывайте также использовать в связке атрибут android:clickable=»true». Иначе работать не будет!
Многострочный текст
Если вы хотите создать многострочный текст в TextView, то используйте символы \n для переноса строк.
Например, в ресурсах:
Обратите внимание, что в тексте также применяется простое форматирование.
Также перенос на новую строку можно задать в коде:
Увеличиваем интервалы между строками
Вы можете управлять интервалом между соседними строчками текста через атрибут android:lineSpacingMultiplier, который является множителем. Установите дробное значение меньше единицы, чтобы сократить интервал или больше единицы, чтобы увеличить интервал между строками.
Бой с тенью
Чтобы оживить текст, можно дополнительно задействовать атрибуты для создания эффектов тени: shadowColor, shadowDx, shadowDy и shadowRadius. С их помощью вы можете установить цвет тени и ее смещение. Во время установки значений вы не увидите изменений, необходимо запустить пример в эмуляторе или на устройстве. В следующем примере я создал тень красного цвета со смещением в 2 пикселя по вертикали и горизонтали. Учтите, что для смещения используются единицы px (пиксели), единицы dp не поддерживаются.
Программный эквивалент — метод public void setShadowLayer (float radius, float dx, float dy, int color):
Создание ссылок автоматом
У TextView есть ещё два интересных свойства Auto link (атрибут autoLink) и Links clickable (атрибут linksClickable), которые позволяют автоматически создавать ссылки из текста.
Выглядит это следующим образом. Предположим, мы присвоим элементу TextView текст Мой сайт: developer.alexanderklimov.ru и применим к нему указанные свойства.
При этом уже на этапе разработки вы увидите, что строка адреса сайта после слов Мой адрес: стала ссылкой. Если вы запустите приложение и нажмете на ссылку, то откроется браузер с указанным адресом. Вам даже не придется писать дополнительный код. Аналогично, если указать номер телефона (параметр phone), то запустится звонилка.
У ссылки есть интересная особенность — при длительном нажатии на ссылку появляется диалоговое окно, позволяющее скопировать ссылку в буфер обмена.
Атрибут autoLink позволяет комбинировать различные виды ссылок для автоматического распознавания: веб-адрес, email, номер телефона.
Цвет ссылки можно поменять через свойство Text color link (XML-атрибут textColorLink), а программно через метод setTextLinkColor().
Программно можно установить ссылки на текст через класс Linkify:
Кроме константы ALL, можно также использовать Linkify.EMAIL_ADDRESSES, Linkify.MAP_ADDRESSES, Linkify.PHONE_NUMBERS. К сожалению, русские адреса не распознаются. В моём случае индекс был распознан как телефонный номер, а город и улица не стали ссылкой.
В таких случаях придётся самостоятельно добавить ссылки в текстах. Например, определим ссылку в ресурсе:
Присвоим созданный ресурс тексту в TextView и запустим пример. Сам текст будет выглядеть как ссылка, но реагировать не будет. Чтобы исправить данную проблему, добавим код:
Ссылки в тексте выглядят не совсем удобными. Есть отдельная библиотека, которая улучшает функциональность. Описание проблем и ссылка на библиотеку есть в статье A better way to handle links in TextView — Saket Narayan.
Совет: Используйте полупрозрачность с умом
Если вам нужно установить текст полупрозрачным, то не используйте атрибут android:alpha:
Дело в том, что такой подход затрачивает много ресурсов при перерисовке.
Атрибут textColor позволяет установить полупрозрачность без потери производительности:
Выделить текст для копирования
По умолчанию, текст в TextView нельзя выделить для копирования. Но в API 11 появилась такая возможность, которая может пригодиться. Делается либо при помощи XML-атрибута android:textIsSelectable, либо через метод setTextIsSelectable().
Добавьте в разметку два компонента TextView и одно текстовое поле EditText для вставки скопированного текста. У первой текстовой метки установим возможность выделения текста декларативно.
Для второго компонента возможность выделения создадим программно.
Сделайте долгий тап на тексте в любом TextView. Увидите стандартные ползунки для выбора длины текста. Скопируйте текст, сделайте длинный тап в EditText и вставьте текст.
Источник
how to wrap text in textview in android
November 2018
122k time
Does any one know how to wrap text in TextView in Android platform. i.e if the text in textview exceed the screen length it should be displayed in the second line.
I have searched and tried the following:
Can anyone suggest how can i do it.. i am relatively new to android platform..
16 answers
Это должно решить вашу проблему: android:layout_weight=»1″ .
Для случая , когда TextView находится внутри TableLayout , то решение установить android:shrinkColumns=»1″ на TableLayout . (Заменить 1 с номером столбца TextView вы хотите , чтобы обернуть это в. (0-индексированном))
AFAICT, никакие другие атрибуты не нужны на TextView .
Для других случаев, увидеть другие ответы здесь.
FWIW, я первоначально получил его, чтобы разобраться в работе с
но это привело к некоторому дополнительному пустому пространству в нижней части диалогового окна все это было в.
У меня такая же проблема. После изменения сделали работу —
Многоточие, MaxLines или layout_weight — все не имеет никакого значения. Примечание — Родитель ширина также устанавливается в качестве wrap_content.
Constraint Layout
- Убедитесь, что ваша ширина макета равна нулю
- влево / вправо ограничения определяются
- высота расположения wrap_content позволяет расширение вверх / вниз.
- Набор android:maxLines=»2″ для предотвращения вертикального расширения (2 является просто например)
- Эллипсы проб. хорошая идея с макс линий android:ellipsize=»end»
0dp ширина позволяет влево / вправо ограничения, чтобы определить, насколько широк ваш виджет.
Установка левого / правого ограничение устанавливает фактическую ширину виджета, в которой ваш текст будет обернуть.
Я использую Android 2.2 и мой TextView автоматически Гот следующую строку, если она превышает экран.
Если вы хотите, чтобы текст перейти на следующую строке до конца экрана, просто добавьте в (просто положить в собственном значении йра). Это будет полезно, если у вас есть изображение справа от текста.
Устанавливая android:maxEms до заданного значения вместе с android:layout_weight=»1″ заставит TextView завернуть как только он достигнет заданной длины СЭМ.
В Android Studio 2.2.3 под inputType собственности есть свойство называется textMultiLine . При выборе этой опции разобралась с подобной проблемой для меня. Надеюсь, это поможет.
Вам нужно добавить TextView в ScrollView с чем-то вроде этого:
Просто работал над TextView внутри макета внутри RecyclerView. У меня был текст получать отрезан, напр, для Read this message , я увидел: Read this . Я попытался установить android:maxLines=»2″ на TextView, но ничего не изменилось. Тем не менее, android:lines=»2″ в результате Read this на первой линии и message на 2 — ом.
Ее на самом деле очень легко. Просто написать: + «\ п», где вы хотите WordWrap
Как ни странно — я создал свой TextView в Кодексе и обернуты — несмотря на меня ничего, кроме стандартного материала не устанавливать — но смотрите сами:
Как вы можете видеть из определения Params Я использую LinearLayout. Класс этикетка просто расширяет TextView — ничего не делать там, кроме установки размера шрифта и цвета шрифта.
При запуске его в эмуляторе (API Level 9) он автоматически переносится текст через 3 линии.
Вы должны использовать 2 параметра:
android:ellipsize=»none» : Текст не режут по ширине TextView
android:scrollHorizontally=»false» текст обтекает на столько строк, сколько необходимо
Использование app:breakStrategy=»simple» в AppCompatTextView , он будет контролировать расположение пункта.
Она имеет три постоянных значения
- сбалансированный
- высокое качество
- просто
Проектирование в вашем TextView XML
Если текущий минимальный уровень API 23 или более в Coding
Для получения более подробной refrence передать этот BreakStrategy
Попробуйте @ подход Guykun и убедитесь, что ширина родителей не установлено, чтобы обернуть содержание. Это то, что я отсутствовал.
OK ребята правда находится где — то в середине потому что вы должны увидеть проблему с точки зрения родителя и ребенка. Решение ниже работает только при включенном режиме вертушки = dialog независимо от версии Android (не проблемы там .. протестировал его в VD и желания с Android => 2,2):
, Установите вы Прядильщик (родительский) режим , как:
Установите режим TextView в (дочерний пользовательский вид) свойства:
Источник
How to wrap text in textview in Android
Does any one know how to wrap text in TextView in Android platform. i.e if the text in textview exceed the screen length it should be displayed in the second line.
I have searched and tried the following:
Can anyone suggest how can I do it.
18 Answers 18
Constraint Layout
- Ensure your layout width is zero
- left / right constraints are defined
- layout height of wrap_content allows expansion up/down.
- Set android:maxLines=»2″ to prevent vertical expansion (2 is just an e.g.)
- Ellipses are prob. a good idea with max lines android:ellipsize=»end»
0dp width allows left/right constraints to determine how wide your widget is.
Setting left/right constraints sets the actual width of your widget, within which your text will wrap.
For me this issue only occurred on Android
For the case where the TextView is inside a TableLayout , the solution is to set android:shrinkColumns=»1″ on the TableLayout . (Replace 1 with the column number the TextView you want to wrap is in. (0-indexed))
AFAICT, no other attributes are needed on the TextView .
For other cases, see the other answers here.
FWIW, I had initially gotten it to sort of work with
but that resulted in some extra empty space at the bottom of the Dialog it was all in.
You must use 2 parameters :
android:ellipsize=»none» : the text is not cut on textview width
android:scrollHorizontally=»false» the text wraps on as many lines as necessary
Use app:breakStrategy=»simple» in AppCompatTextView , it will control over paragraph layout.
It has three constant values
Designing in your TextView xml
If your current minimum api level is 23 or more then in Coding
For more refrence refer this BreakStrategy
This should fix your problem: android:layout_weight=»1″ .
OK guys the truth is somewhere in the middle cause you have to see the issue from the parent’s view and child’s. The solution below works ONLY when spinner mode = dialog regardless of Android version (no problem there.. tested it in VD and DesireS with Android =>2.2) :
.Set you spinner’s(the parent) mode like :
Set the textview’s(child custom view) properties to :
I hope this works for you also.
By setting android:maxEms to a given value together with android:layout_weight=»1″ will cause the TextView to wrap once it reaches the given length of the ems.
In Android Studio 2.2.3 under the inputType property there is a property called textMultiLine . Selecting this option sorted out a similar problem for me. I hope that helps.
Just was working on a TextView inside a layout inside a RecyclerView. I had text getting cut off, ex, for Read this message , I saw: Read this . I tried setting android:maxLines=»2″ on the TextView, but nothing changed. However, android:lines=»2″ resulted in Read this on first line and message on the 2nd.
Try @Guykun’s approach
android:layout_weight=»1″ android:ellipsize=»none» android:maxLines=»100″ android:scrollHorizontally=»false»
Also, make sure that parents width is not set to wrap content. This is the thing that I was missing.
I had the same problem. Following change made it work —
The ellipsis, maxLines, or layout_weight — all didn’t make any difference. Note — The parent width is also set as wrap_content.
All you have to do is to set your textview width.
android:layout_width=»60dp»
you can change the width to your choice. Just type long sentence to check if it working like this
android:text=»i want to be among world class software engineer»
I am using Android 2.2 and my textview will automatically goto the next line if it exceeds the screen.
If you would like to have the text goto the next line before the end of the screen, just add in (just put in your own dp value). This will be useful if you have a picture on the right of the text.
Strange enough — I created my TextView in Code and it wrapped — despite me not setting anything except standard stuff — but see for yourself:
As you can see from the params definition I am using a LinearLayout. The class Label simply extends TextView — not doing anything there except setting the font size and the font color.
When running it in the emulator (API Level 9) it automatically wraps the text across 3 lines.
Just set layout_with to a definate size, when the text fills the maximum width it will overflow to the next line causing a wrap effect.
The trick is with the textView width, try to make it dedicated number like:
I’ve tried many solutions without any result, I’ve tried:
the only one thing triggred the wrap option is the dedicated width
You need to add your TextView in a ScrollView with something like this :
Источник