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 >Тут я взял красный цвет из ресурсов андроида (но лучше использовать свои, так как некоторые ресурсы в модифицированных системах могут просто-напросто отсутствовать). А так же изменил размер текста.
И указываю свой стиль данному аттрибуту. Результат должен быть отрисован сразу.
И добавил кнопку для наглядности. Текст аналогичен.
android:textColor
android:textSize
Так же был показан выше. Отвечает за размер текста в конкретном TextView. Размер указываем в величине sp. Описание взял из ответа на стаке:
Scale-independent Pixel — пиксель, не зависящий от масштабирования — зависит от плотности экрана, но результат будет масштабироваться в соответствии с настройками размера шрифта пользователя. Рекомендуется для задания размеров шрифтов, чтобы текст подстраивался как под плотность экрана, так и под настройки, заданные пользователем.
android:typeface
Меняет используемый шрифт у TextView. Может иметь такие значения: normal, sans, serif, monospace. Где стандартный это нормальный, а остальные немного отличаются визуально. Свои шрифты можно указать при помощи другого тега или в исходном коде.
monospace
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 на весь экран и указал своё положение текста.
android:autoLink + android:linksClickable
А android:linksClickable, который может быть true или 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(); .
Как изменить текст кнопки программно
Ребят подскажите как нажав на кнопку изменить имя другой которая находится на другой форме? заранее.
Решение
Как программно изменить текст Label?
Имеется на страничке порядка пару сотен Label, примерно в 50 нужно изменить текст. почему когда.
Как на JS программно изменить текст NGUI?
Всем привет! Недавно столкнулся с проблемой, что не удается программно изменить текст в Label NGUI.
Как изменить весь текст документа word программно
Здравствуйте, как изменить весь текст в ворде на Arial с помощью кнопки на форме.
Текст из TextView перенести в другой TextView по нажатию Button
Люди, помогите плиз. Недавно начал ковырять программирование под Android. Хотел сделать банальную.
Как программно поменять альфу у TextView?
Приветствую вас, Форумчане! Не подскажите ли, как программно поменять параметр Alpha у TextView.
Как изменить форму TextView элемента?
как изменить форму ТеxtView элемента? Т.е у меня текст на полупрозрачном прямоугольном фоне. Как.
Читайте также: