Android studio как изменить текст в textview

Обновлено: 19.09.2024

Продолжаем с TextView. Да, материал я хотел опубликовать еще вчера, но не опубликовал.

Там мы указываем текст для TextView, разбираемся с strings.xml и способ создания локализованных strings.xml

В прошлый раз мы указали текст нашему View, притом сделали это разными способами. В этот раз предлагаю разобрать все остальные xml аттрибуты TextView, а так же рассмотреть их реализацию в коде.

Дополнительно можете ознакомиться с официальной документацией от Google вот тут.

Аттрибуты TextView

Сразу предупреждаю, что тут будут не буквально ВСЕ доступные аттрибуты для TextView, а только его собственные (а так же доступные его дочерним классам). А общие аттрибуты для всех View рассмотрю уже позже (сюда же отнесу и их размеры, положение относительно других элементов и т.д.).

Почему нам может быть интересен именно TextView? Ну, логичнее было бы начать таки с их общего родителя View, но и Text куда интереснее чем вы можете подумать. В Android он является родителем Button (кнопка) и EditText (поле ввода), а значит, что все указанные тут аттрибуты будут применимы к ним. Это справедливо для любого наследующего TextView класса.

android:enabled

Может иметь значения true или false. Влияет на активность виджета.

Неактивный view будет визуально отличаться от активного, а так же его нельзя будет взять в фокус или кликнуть на него.

При этом мы все так же можем изменить содержимое даже для неактивного TextView (setText в исходном коде).

android:textAppearance

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

К примеру. В файле styles.xml добавляем такой код:

& lt ; style name = "TextAppearance.TestApp" parent = "TextAppearance.AppCompat" > & lt ; item name = "android:textColor" > @ android : color / holo_red_dark & lt ; / item >

Тут я взял красный цвет из ресурсов андроида (но лучше использовать свои, так как некоторые ресурсы в модифицированных системах могут просто-напросто отсутствовать). А так же изменил размер текста.

И указываю свой стиль данному аттрибуту. Результат должен быть отрисован сразу.


Наш стиль работает как нужно!

И добавил кнопку для наглядности. Текст аналогичен.


Как я и говорил, кнопка наследник TextView, а потому имеет максимально много общего

android:textColor


Шестнадцатеричная система поможет получить любой цвет!

android:textSize

Так же был показан выше. Отвечает за размер текста в конкретном TextView. Размер указываем в величине sp. Описание взял из ответа на стаке:

Scale-independent Pixel — пиксель, не зависящий от масштабирования — зависит от плотности экрана, но результат будет масштабироваться в соответствии с настройками размера шрифта пользователя. Рекомендуется для задания размеров шрифтов, чтобы текст подстраивался как под плотность экрана, так и под настройки, заданные пользователем.

android:typeface

Меняет используемый шрифт у TextView. Может иметь такие значения: normal, sans, serif, monospace. Где стандартный это нормальный, а остальные немного отличаются визуально. Свои шрифты можно указать при помощи другого тега или в исходном коде.


monospace


serif

android:textStyle

На деле действует подобно android:textAppearance, но, в отличие от него может действовать не только на текст, а и на остальные аттрибуты.

android:textColorHighlight и android:textIsSelectable

android:textColorHighlight позволяет изменить цвет выделяемого текста, а android:textIsSelectable со значением true позволяет выделять обычный текст в TextView (чего изначально делать нельзя).


Код такой

Результат уже запущенного приложения:

android:textColorHint + android:hint

Подсказка будет отображаться тогда, когда у нас не выведен никакой текст. Если вы не меняли цвет, то она будет светло-серого цвета.


Текста нет, подсказка есть


Все так же, но цвет подсказки изменен

Вообще это имеет большую пользу для полей ввода (EditText). Вы точно с такими сталкивались и не раз.

android:textColorLink

Текст может содержать ссылки. Они имеют свой особый цвет, а мы его можем изменить. Цвет, как и обычно: ресурс или HEX.


И такой вот код

android:ellipsize + android:singleLine

Английские названия говорят за себя. Многоточие и одна линия. Последнее принимает логические значения true или false. Это и определяет, будет ли у нашего TextView одна строка или много.

Многоточие может иметь значения: end, marquee, middle, none, start. Очевидно, что изначально никакого многоточия нет, так что дефолтное это none. marquee нужно для создания автоматической прокрутки длинного текста, немного позже я покажу как, но нужны еще теги. А end, middle, start соответствуем названиям и выводит многоточие в конце, середине или начале строки.

android:gravity

Определяет положение текста внутри TextView. В примере я развернул свой TextView на весь экран и указал своё положение текста.


Все варианты gravity указаны в правом окошке

android:autoLink + android:linksClickable

А android:linksClickable, который может быть true или false, определяет, можно ли будет нажать на эти ссылки.


Так как значение linksClickable=false, то ссылки будут подсвечены, но нажать на них будет нельзя

android:maxWidth, android:maxHeight и их min версии

Понятно, что этими тегами можно указать максимально и минимально допустимые значения высоты и ширины в пикселях (вернее dp (density-independent pixels)) для TextView.


Хоть и ширина указана по контенту, но есть ограничение по максимальной ширине

android:bufferType

Определяет тип возвращаемого значения для функции getText(). По умолчанию имеет значение normal. Так же есть вариант spannable и editable. Возвращают соответственно Spannable и Editable + Spannable, тогда как тип normal зависит от типа заданного текста.

android:text

Уже знакомый нам тег, с его помощью мы указываем текст нашему TextView.

android:textScaleX

Позволяет указать множитель ширины текста. Принимает значения с плавающей запятой.

android:lines, android:lines, android:minLines

Позволяют управлять количеством отображаемых строк в TextView. lines указывает фиксированное число линий, остальные создают ограничения. Указывать целые числа.


Текст был больше, честно

Тут будем краток и покажу все, что нужно одним примером. Думаю все и без лишних слов)

но по какой-то причине при запуске появляется только второй текст. Я думаю, что это может иметь какое-то отношение к Thread.sleep() способ блокировки. Так может кто-нибудь показать мне, как реализовать таймер "асинхронно"?

Я только что опубликовал этот ответ в android-обсуждение google group

Если вы просто пытаетесь добавить текст в представление, чтобы он отображал "Шаг первый: взорвать яйцо Шаг второй: жарить яйцо", то подумайте об использовании t.appendText("Step Two: fry egg"); вместо t.setText("Step Two: fry egg");

Если вы хотите, чтобы полностью изменить то, что находится в TextView Так что он говорит "Шаг первый: взорвать яйцо" при запуске, а затем он говорит "Шаг второй: жарить яйцо" через некоторое время вы всегда можете использовать

Runnable пример sadboy дал

код onCreate() метод имеет несколько огромных недостатков:

1) onCreate готовит ваша деятельность-так что ничего, что вы здесь делаете не будет сделано видимого пользователю, пока этот метод не закончится! Например - вы никогда не сможете изменить TextView текст здесь больше, чем один время, как только последнее изменение будет нарисовано и таким образом видно пользователю!

2) имейте в виду, что программа Android будет по умолчанию работать в один нить только! Таким образом: никогда не используйте Thread.sleep() или Thread.wait() в главном потоке, который отвечает за ваш пользовательский интерфейс! (читать "держите приложение отзывчивым" для получения дополнительной информации!)

что ваш инициализации ваши действия это:

  • без причины вы создаете новый TextView объект t !
  • вы выбираете свой макет TextView в переменной t позже.
  • вы устанавливаете текст t (но имейте в виду: он будет отображаться только после onCreate() finishes и основной цикл событий вашего приложения работает!)
  • ждать 10 секунд в своем onCreate способ - это никогда не должно быть сделано как он останавливает все действия пользовательского интерфейса и, безусловно, заставит ANR (приложение не отвечает, см. ссылку выше!)
  • затем вы устанавливаете другой текст - этот будет отображаться, как только ваш onCreate() способ финиши и несколько других жизненный цикл активности методы были обработаны!

установить текст только один раз в onCreate() - это должен быть первый текст, который должен быть видимым.

создать Runnable и Handler

установите этот runnable как обработчик, возможный в onCreate() (но прочитайте мой совет ниже):

совет: убедитесь, что вы знаете Activity С жизненным циклом! Если вы делаете такие вещи в onCreate() это произойдет только тогда, когда ваш Activity создана первый время! Android, возможно, сохранит ваш Activity живой в течение более длительного периода времени, даже если это не видно! Когда пользователь "запускает" его снова - и он все еще существует - вы больше не увидите свой первый текст!

=> Всегда устанавливайте обработчики в onResume() и отключить их в onPause() ! В противном случае вы получите "обновления", когда ваш Activity не видно вообще! В вашем случае, если вы хотите увидеть свой первый текст снова при его повторной активации, вы должны установить его в onResume() , а не onCreate() !

первая строка нового вида текста не нужна

вы можете сделать это

я обнаружил, что при использовании строковой переменной мне нужно либо префикс со строкой"", либо явно привести к CharSequence.

или, Поскольку ваша строка не является динамической, еще лучше:

по вашему совету я использую handle и runnables для переключения / изменения содержимого TextView с помощью "таймера". по какой-то причине при запуске приложение всегда пропускает второй шаг ("шаг два: жарить яйцо") и показывает только последний (третий) шаг ("шаг три: подавать яйцо").

Иногда при создании приложений под Android требуется вывести разноцветный текст в одном месте. Чтобы не создавать много TextView для разноцветного текста можно воспользоваться HTML-тегами.

В этой статье мы рассмотрим как можно раскрасить текст, вставить в TextView ссылки, сделать текст жирным, курсивным и т. д.

Раскрашиваем текст

В layout-файле вставляем TextView:

Если вы хотите хранить строку в ресурсах:

Как видите HTML-код должен располагаться между <![CDATA[ и ]]>

Вставляем ссылки

Для вставки ссылок в TextView используется HTML-тег <a>.
Пример ссылки в HTML:

Ссылка корректно отображается, но при нажатии на нее ничего не происходит. Для того, чтобы нажатие на ссылку обрабатывались вставим этот код:

Теперь нажатие на ссылку корректно обрабатывается.

Если вы хотите изменить цвет ссылки, то вы можете сделать это двумя способами:

или как атрибут TextView в xml:

Убираем подчеркивание текста у ссылки

Создадим класс URLSpanNoUnderline и вставим в него следующий код:

В MainActivity вставляем:

Осталось вызвать метод removeUnderline и передать на вход TextView.

Внимание!
Не забывайте передавать в качестве второго параметра TextView.BufferType.SPANNABLE, а иначе программа выдаст ошибку.

Форматирование текста

Для форматирования текста в HTML существует много тегов. Ниже приведена таблица тегов для форматирования текста:

Код HTMLОписаниеПример
<b>Текст</b>Жирное начертание текстаТекст
<i>Текст</i>Курсивное начертание текстаТекст
<u>Текст</u>Подчеркнутый текстТекст
<strike>Текст</strike>Зачеркнутый текстТекст
<sup>Текст</sup>Верхний индексa 2
<sub>Текст</sub>Нижний индексA2

Любые теги форматирования текста можно использовать совместно друг с другом.


Как программно изменить textview?
Мне нужно изменить TextView на многострочный текст, используя переменную. . Пример ниже. String.

Программно изменить TextView и остановить таймер в ListView с multiple CountDownTimer
Как по событию финишировать таймер и поменять TextView (tvStateClose и tvTimeRemainingClose) ? .

Изменить текст TextView другого Фрагмента, не открывая его
Могу передать данные из Activiry во фрагмента когда он открыт. blank1 = new BlankFragment(); .


Как изменить текст кнопки программно
Ребят подскажите как нажав на кнопку изменить имя другой которая находится на другой форме? заранее.

Найти в разметках файлик с хедером, в нём выдать id вьюшке и в уже в активити повесить текст (можно и в разметке).

Решение


Как программно изменить текст Label?
Имеется на страничке порядка пару сотен Label, примерно в 50 нужно изменить текст. почему когда.

Как на JS программно изменить текст NGUI?
Всем привет! Недавно столкнулся с проблемой, что не удается программно изменить текст в Label NGUI.

Как изменить весь текст документа word программно
Здравствуйте, как изменить весь текст в ворде на Arial с помощью кнопки на форме.

Текст из TextView перенести в другой TextView по нажатию Button
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную.

Как программно поменять альфу у TextView?
Приветствую вас, Форумчане! Не подскажите ли, как программно поменять параметр Alpha у TextView.

Как изменить форму TextView элемента?
как изменить форму ТеxtView элемента? Т.е у меня текст на полупрозрачном прямоугольном фоне. Как.

Читайте также: