Перейти к содержимому

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

  • автор:

TextView

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

Находится в разделе Texts.

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

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

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

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

 android:text="@string/hello" 

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

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

 // Инициализируем компонент TextView textView = findViewById(R.id.textView); // задаём текст textView.setText("Hello Kitty!"); // или с использованием текстовых ресурсов textView.setText(R.string.hello); 

Атрибуты

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

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

Программно установим размеры текста при помощи setTextSize() с различными единицами измерения.

 // 20 DIP (Device Independent Pixels) textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20); // 0.5 inch textView.setTextSize(TypedValue.COMPLEX_UNIT_IN, 0.5f); // 10 millimeter textView.setTextSize(TypedValue.COMPLEX_UNIT_MM, 10); // 30 points textView.setTextSize(TypedValue.COMPLEX_UNIT_PT, 30); // 30 raw pixels textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30); // 30 scaled pixels textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30); 

TextView

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

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

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

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

 #337700 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 android:lineSpacingMultiplier="0.8" 

Бой с тенью

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

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 и применим к нему указанные свойства.

При этом уже на этапе разработки вы увидите, что строка адреса сайта после слов Мой адрес: стала ссылкой. Если вы запустите приложение и нажмете на ссылку, то откроется браузер с указанным адресом. Вам даже не придется писать дополнительный код. Аналогично, если указать номер телефона (параметр 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: [email protected] \n" + "Телефон: (495)-458-58-29 \n" + "Адрес: 10110 ул.Котовского, г.Мышкин \n" + "\n" + "Классно получилось?"; if(tvDisplay != null)

Ссылка в TextView

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

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

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

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

Ссылки в тексте выглядят не совсем удобными. Есть отдельная библиотека, которая улучшает функциональность. Описание проблем и ссылка на библиотеку есть в статье A better way to handle links in TextView — Saket Narayan.

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

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

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

Атрибут textColor позволяет установить полупрозрачность без потери производительности:

Выделить текст для копирования

По умолчанию, текст в TextView нельзя выделить для копирования. Но в API 11 появилась такая возможность, которая может пригодиться. Делается либо при помощи XML-атрибута android:textIsSelectable, либо через метод setTextIsSelectable().

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

Для второго компонента возможность выделения создадим программно.

 TextView secondTextView = (TextView) findViewById(R.id.textView2); secondTextView.setTextIsSelectable(true); 

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

Стили

Выводим разделитель под текстом.

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

Для простого вывода текста на экран предназначен элемент TextView . Он просто отображает текст без возможности его редактирования. Некоторые его основные атрибуты:

  • android:text : устанавливает текст элемента
  • android:textSize : устанавливает высоту текста, в качестве единиц измерения для указания высоты используются sp
  • android:background : задает фоновый цвет элемента в виде цвета в шестнадцатиричной записи или в виде цветового ресурса
  • android:textColor : задает цвет текста
  • android:textAllCaps : при значении true делает все символы в тексте заглавными
  • android:textDirection : устанавливает направление текста. По умолчанию используется направление слева направо, но с помощью значения rtl можно установить направление справо налево
  • android:textAlignment : задает выравнивание текста. Может принимать следующие значения:
    • center : выравнивание по центру
    • textStart : по левому краю
    • textEnd : по правому краю
    • viewStart : при направлении текста слева направо выравнивание по левому краю, при направлении справа налево — по правому
    • viewEnd : при направлении текста слева направо выравнивание по правому краю, при направлении справа налево — по левому
    • monospace
    • serif
    • serif-monospace
    • sans-serif
    • sans-serif-condensed
    • sans-serif-smallcaps
    • sans-serif-light
    • casual
    • cursive
    • cursive

    Например, определим три текстовых поля:

    Атрибуты TextView в Android Studio

    Установка элемента в коде тоже не отличается сложностью. Например, создадим элемент и выведем его на экран:

    package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import android.graphics.Typeface; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends AppCompatActivity < @Override protected void onCreate(Bundle savedInstanceState) < super.onCreate(savedInstanceState); ConstraintLayout constraintLayout = new ConstraintLayout(this); TextView textView = new TextView(this); // установка фонового цвета textView.setBackgroundColor(0xffe8eaf6); // установка цвета текста textView.setTextColor(0xff5c6bc0); // делаем все буквы заглавными textView.setAllCaps(true); // устанавливаем вравнивание текста по центру textView.setTextAlignment(TextView.TEXT_ALIGNMENT_CENTER); // устанавливаем текста textView.setText("Hello Android!"); // установка шрифта textView.setTypeface(Typeface.create("casual", Typeface.NORMAL)); // устанавливаем высоту текста textView.setTextSize(26); ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams (ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT); layoutParams.leftToLeft = ConstraintLayout.LayoutParams.PARENT_ID; layoutParams.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; textView.setLayoutParams(layoutParams); constraintLayout.addView(textView); setContentView(constraintLayout); >>

    Создание TextView в Java в Android Studio

    Иногда необходимо вывести на экран какую-нибудь ссылку, либо телефон, по нажатию на которые производилось бы определенное действие. Для этого в TextView определен атрибут android:autoLink :

    autolink in Android

    android:autoLink может принимать несколько значений:

    • none : отключает все ссылки
    • web : включает все веб-ссылки
    • email : включает ссылки на электронные адреса
    • phone : включает ссылки на номера телефонов
    • map : включает ссылки на карту
    • all : включает все вышеперечисленные ссылки

    То есть при настройке android:autoLink=»web» если в тексте есть упоминание адреса url, то этот адрес будет выделяться, а при нажатии на него будет осуществлен переход к веб-браузеру, который откроет страницу по этому адресу. С помощью прямой черты мы можем объединять условия, как в данном случае: android:autoLink=»web|email»

    Вертикальный TextView

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

    Сначала создадим стили для будущего вертикального текста:

    res/values/styles.xml

          

    Также создайте строковый ресурс в файле res/values/strings.xml:

     Вертикальный текст 

    Далее напишем отдельный класс для нового компонента. В старом варианте, который писался несколько лет назад, я использовал TextView, но сейчас студия стала советовать использовать AppCompatTextView и я согласился:

     package ru.alexanderklimov.verticaltext; import android.content.Context; import android.graphics.Canvas; import android.support.annotation.Nullable; import android.support.v7.widget.AppCompatTextView; import android.text.TextPaint; import android.util.AttributeSet; import android.view.Gravity; public class VerticalTextView extends AppCompatTextView < final boolean topDown; TextPaint textPaint = getPaint(); public VerticalTextView(Context context, @Nullable AttributeSet attrs) < super(context, attrs); final int gravity = getGravity(); if (Gravity.isVertical(gravity) && (gravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.BOTTOM) < setGravity((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) | Gravity.TOP); topDown = false; >else < topDown = true; >> @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) < super.onMeasure(widthMeasureSpec, heightMeasureSpec); setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); >@Override protected void onDraw(Canvas canvas) < textPaint.setColor(getCurrentTextColor()); textPaint.drawableState = getDrawableState(); canvas.save(); if (topDown) < canvas.translate(getWidth(), 0); canvas.rotate(90); >else < canvas.translate(0, getHeight()); canvas.rotate(-90); >canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop()); getLayout().draw(canvas); canvas.restore(); > > 

    Чтобы добавить компонент в режиме дизайна, выбираем Advanced и переносим на форму элемент , откроется диалоговое окно, в котором нужно найти свой класс. В таком варианте компонент будет представлен следующим образом.

    Можно использовать другой привычный формат. Чтобы менять направление текста, поиграйтесь с атрибутом android:gravity:

    Вертикальный текст

    Пример может послужить отправной точкой для дальнейшего улучшения.

    Текст под углом

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

     package ru.alexanderklimov.custom; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.support.v7.widget.AppCompatTextView; import android.text.TextPaint; import android.util.AttributeSet; public class RotateTextView extends AppCompatTextView < private TextPaint mPaint = getPaint(); public RotateTextView(Context context) < super(context); init(); >public RotateTextView(Context context, AttributeSet attrs) < super(context, attrs); init(); >public RotateTextView(Context context, AttributeSet attrs, int defStyleAttr) < super(context, attrs, defStyleAttr); init(); >@Override protected void onDraw(Canvas canvas) < super.onDraw(canvas); int viewWidth = getWidth(); int viewHeight = getHeight(); canvas.translate(viewWidth / 2, viewHeight / 2); for (int i = 0; i < 10; i++) < String message = "Котик"; canvas.drawText(message, 30, 0, mPaint); canvas.rotate(36); >> private void init() < mPaint.setColor(Color.BLUE); mPaint.setTextSize(50); mPaint.setAntiAlias(true); >> 

    Android. Работа с TextView

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

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

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

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

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

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

    My Color Text]]>

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

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

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

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

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

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

    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 = "My Link"; TextView tv = (TextView) findViewById(R.id.colorText); tv.setText(Html.fromHtml(myLink), TextView.BufferType.SPANNABLE); removeUnderline(tv);

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

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

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

    Код HTML Описание Пример
    Текст Жирное начертание текста Текст
    Текст Курсивное начертание текста Текст
    Текст Подчеркнутый текст Текст
    Текст Зачеркнутый текст Текст
    Текст Верхний индекс a 2
    Текст Нижний индекс A2

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

    Просмотров: 3 170

    • Android
    • Уроки Android

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *