Часто новички не знают, с чего начать, где найти доступное описание. Материала много, а хорошего, увы, существенно меньше. Предлагаем широкому вниманию прекрасно изложенный материал о виджете TextView. Превосходно подойдет для первого знакомства и использования.

Виджет TextView предназначен для отображения текста без возможности редактирования его пользователем, что видно из его названия (Text - текст, view - просмотр).

Находится в папке Form Widgets под четырьмя вариантами: TextView, Large Text, Medium Text, Small Text.

TextView

TextView - один из самых используемых виджетов. С его помощью пользователю удобнее ориентироваться в программе. По сути, это как таблички: Руками не трогать, По газону не ходить, Вход с собаками воспрещен, Часы работы с 9.00 до 18.00 и т.д., и служит для представления пользователю описательного текста.

Для отображения текста в Textview в файле разметки используется атрибут android:text, например:

android:text="Погладь кота, ...!" 

Такой подход является нежелательным. Рекомендуется всегда использовать текстовые ресурсы. В будущем эта привычка позволит вам обеспечить многоязыковую поддержку:

android:text="@string/hello"

 Программная установка текста

Программно текст можно задать методом setText():

 // загружаем виджет из ресурсов 
TextView text = (TextView)findViewById(R.id.text1);
// задаем текст
text.setText("Hello, Android!");
// или с использованием текстовых ресурсов
text.setText(R.string.hello);

Атрибуты

android:textsize
размер текста. При установке размера текста используются несколько единиц измерения: px (пиксели), dp, sp, in (дюймы), pt, mm. Для текстов рекомендуется использовать sp: android:textSize="48sp"
android:textstyle
стиль текста. Используются константы: normal, bold, italic. Например, android:textStyle="bold"
android:textcolor
цвет текста. Используются четыре формата в шестнадцатеричной кодировке: #RGB; #ARGB; #RRGGBB; #AARRGGBB, где R, G, B — соответствующий цвет, А — прозрачность (alpha-channel). Значение А, установленное в 0, означает прозрачность 100%.

Для всех вышеперечисленных атрибутов в классе Textview есть соответствующие методы для чтения или задания соответствующих свойств.

 TextView

 

По умолчанию у компонентов TextView отсутствует граница. Чтобы задать границу, укажите значение Drawable для атрибута android:background. В качестве значения Drawable может использоваться изображение или XML-представление фигуры, включающий ресурс Drawable (поместить в папку res/drawable).

Программная установка фона

В некоторых случаях программисты из-за невнимательности неправильно меняют фон элемента программным способом и удивляются, почему ничего не работает.

Предположим, у вас определён в ресурсах зелёный цвет:

<color name="tvBackground">#337700</color>

 Следующий код будет ошибочным:

  tv.setBackgroundColor(R.color.tvBackground); // не работает

 Нужно так (два варианта):

  tv.setBackgroundResource(R.color.tvBackground); // первый вариант tv.setBackgroundColor(getResources().getColor(R.color.tvBackground)); // второй вариант

 Реагируем на событие onClick

 Если вы хотите, чтобы TextView обрабатывал нажатия (атрибут android:onClick), то не забывайте также использовать в связке атрибут android:clickable="true". Иначе работать не будет!

 Многострочный текст

 Если вы хотите создать многострочный текст в TextView, то используйте символы \n для переноса строк.

 Например, в ресурсах:

  <string name="about_text"> У лукоморья дуб зелёный;\n Златая цепь на дубе том:\n И днём и ночью <b>кот учёный</b>\n Всё ходит по цепи кругом;\n Идёт <b>направо</b> - песнь заводит,\n <b>Налево</b> - сказку говорит.</string>

 Обратите внимание, что в тексте также применяется простое форматирование.

 Также перенос на новую строку можно задать в коде:

  textView.setText("Первая строка \nВторая строка \nТретья строка");

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

Вы можете управлять интервалом между соседними строчками текста через атрибут android:lineSpacingMultiplier, который является множителем. Установите дробное значение меньше единицы, чтобы сократить интервал или больше единицы, чтобы увеличить интервал между строками.

  android:lineSpacingMultiplier="0.8"

Бой с тенью

Чтобы оживить текст, можно дополнительно задействовать атрибуты для создания эффектов тени: shadowColor, shadowDx, shadowDy и shadowRadius. С их помощью вы можете установить цвет тени и ее смещение. Во время установки значений вы не увидите изменений, необходимо запустить пример в эмуляторе или на устройстве. В следующем примере я создал тень красного цвета со смещением в 2 пикселя по вертикали и горизонтали.

TextView с тенью

 Программный эквивалент - метод public void setShadowLayer (float radius, float dx, float dy, int color):

  TextView textShadow = (TextView)findViewById(R.id.hello); textShadow.setShadowLayer( 5f, //float radius 10f, //float dx 10f, //float dy 0xFFFFFFFF //int color );

 Создание ссылок автоматом

 У TextView есть еще два интересных свойства Auto link (атрибут autoLink) и Links clickable (атрибут linksClickable), которые позволяют автоматически создавать ссылки из текста.

 Выглядит это следующим образом. Предположим, мы присвоим элементу TextView текст Мой сайт: developer.alexanderklimov.ru и применим к нему указанные свойства.

  <TextView android:id="@+id/textView1" android:layout_width="match_parent" android:autoLink="web" android:linksClickable="true" android:text="Мой адрес: developer.alexanderklimov.ru" />

 При этом уже на этапе разработки вы увидите, что строка адреса сайта после слов Мой адрес: стала ссылкой. Если вы запустите приложение и нажмете на ссылку, то откроется браузер с указанным адресом. Вам даже не придется писать дополнительный код. Аналогично, если указать номер телефона (параметр phone), то запустится звонилка.

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

 Атрибут autoLink позволяет комбинировать различные виды ссылок для автоматического распознавания: веб-адрес, email, номер телефона.

Ссылка в TextView

Цвет ссылки можно поменять через свойство Text color link (XML-атрибут textColorLink), а программно через метод setTextLinkColor().

Программно можно установить ссылки на текст через класс Linkify:

TextView tvDisplay = (TextView)findViewById(R.id.tvDisplay);

String data = "" +
        "Пример использования Linkify для создания ссылок в тексте.\n" +
        "\n" +
        "URL: http://developer.alexanderklimov.ru/ \n" +
        "Email: 
 This email address is being protected from spambots. You need JavaScript enabled to view it.
  \n" +
        "Телефон: (495)-458-58-29 \n" +
        "Адрес: 10110 ул.Котовского, г.Мышкин \n" +
        "\n" +
        "Классно получилось?";
 
        if(tvDisplay != null) {
            tvDisplay.setText(data);
            Linkify.addLinks(tvDisplay, Linkify.ALL);
        }

 

Ссылка в TextView

 

Кроме константы ALL, можно также использовать Linkify.EMAIL_ADDRESSES, Linkify.MAP_ADDRESSES, Linkify.PHONE_NUMBERS. К сожалению, русские адреса не распознаются. В моём случае индекс был распознан как телефонный номер, а город и улица не стали ссылкой.

В таких случаях придётся самостоятельно добавить ссылки в текстах. Например, определим ссылку в ресурсе:

<string name="my_site"><a href="http://developer.alexanderklimov.ru/android">Самый лучший сайт про android</a></string>

Присвоим созданный ресурс тексту в TextView и запустим пример. Сам текст будет выглядеть как ссылка, но реагировать не будет. Чтобы исправить данную проблему, добавим код:

TextView tv = (TextView) findViewById(R.id.textView1); tv.setMovementMethod(LinkMovementMethod.getInstance());

Совет: Используйте полупрозрачность с умом

Если вам нужно установить текст полупрозрачным, то не используйте атрибут android:alpha:

  <TextView android:textColor="#fff" android:alpha="0.5" />

Дело в том, что такой подход затрачивает много ресурсов при перерисовке.

<TextView android:textColor="80ffffff" />

 

Вверх