Перейти к содержимому
Меню
  • Java SE
  • Android
  • Поиск
  • Java SE
  • Android

JAVA-HELP

Сайт для Java разработчиков

Android. Работа с TextView

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

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

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

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

<TextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/colorText">

Код MainActivity:

String myColorText = "<font color=\"#ff0000\">My Color Text</font>"; //раскрашиваем текст в красный цвет
TextView tv = (TextView) findViewById(R.id.colorText); tv.setText(Html.fromHtml(myColorText));

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

strings.xml:

<string name="color_text"><![CDATA[<font color="#ff0000">My Color Text</font>]]></string>

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

MainActivity:

TextView tv = (TextView) findViewById(R.id.colorText);
tv.setText(Html.fromHtml(getResources().getString(R.string.color_text)));

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

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

<a href="http://mysite.ru">Ваш текст</a>

Код MainActivity:

TextView tv = (TextView) findViewById(R.id.colorText); tv.setText(Html.fromHtml(getResources().getString(R.string.my_link)));

strings.xml:

<string name="my_link"><![CDATA[<a href="http://ya.ru">My Link</a>]]></string>

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

tv.setMovementMethod(LinkMovementMethod.getInstance());

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

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

Из кода:

tv.setLinkTextColor(Color.RED);

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

android:textColorLink="#ff0000"

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

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

public class URLSpanNoUnderline extends URLSpan{

  public URLSpanNoUnderline(String url){
     super(url);
  }

  @Override
  public void updateDrawState(TextPaint ds){
    super.updateDrawState(ds);
    ds.setUnderlineText(false);
  }
}

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

void removeUnderline(TextView textView){

  Spannable s = (Spannable)textView.getText();
  URLSpan[] spans = s.getSpans(0, s.length(), URLSpan.class);

  for (URLSpan span: spans){
    int start = s.getSpanStart(span);
    int end = s.getSpanEnd(span);
    s.removeSpan(span);
    span = new URLSpanNoUnderline(span.getURL());
    s.setSpan(span, start, end, 0);
  }

  textView.setText(s);
}

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

Пример:

String myLink = "<a href=\"http://ya.ru\">My Link</a>";
TextView tv = (TextView) findViewById(R.id.colorText);
tv.setText(Html.fromHtml(myLink), TextView.BufferType.SPANNABLE);
removeUnderline(tv);

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

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

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

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

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

Категории
  • Android
  • Уроки Android
Предыдущая заметка

Android. Очищаем стек активити

Следующая заметка

MaterialDialog в приложении Android

Рубрики

  • Android
    • Android-библиотеки
    • Android-сниппеты
    • Material Design
    • Инструменты разработчика
    • Уроки Android
  • Java SE
    • Java-сниппеты
    • Изучение Java
    • Обзор Java-классов
    • Основы Java
  • Kotlin

Популярные записи

  • Загрузка изображений с помощью библиотеки Glide. Начало работы
  • Руководство по использованию ORM DBFlow в Android-приложении
  • Анимированный Toolbar: фичи Design Support Library
  • Я хочу программировать под Android. Вопрос #5
  • Используем ACRA в своем приложении

Copyright © 2020– JAVA-HELP. Все права защищены. Политика конфиденциальности