Android spannablestring to string

Getting Started with Spannables on Android

Begin formatting text like a pro!

T ext, probably the most basic element you get to work with on Android, and sometimes we have to format certain parts of our text. Formatting helps place emphasis on text, indicating that the formatted parts of text mean more when compared to plain parts. Formatting options include underline, bold, italics, strikethrough and many more. Android provides a number of options to its’ developers when it comes to formatting text. A direct approach is by using HTML markup to define sections of our text to be formatted, tags like the — underline, — bold and — italics do just that. Android properly helps us convert the markup provided into nicely formatted text.

Using XML

Or Code

We have an awesome option for formatting, don’t we? but that’s not all there is to formatting.

Formatting is the arrangement of a material in a particular layout, shape, size and general makeup — Merriam-Webster

Formatting goes beyond boldening or underlining text, we have a pool of design possibilities we can replicate. For example, we might want to set the colour of a fraction of our text differently or its size or its background, whatever. These designs are achievable using spannables without having to worry about too much.

Our First Spannable

To get started, create a new android studio project with your preferred project name and add this to the activity_main.xml . In the code below, we have a parent LinearLayout and five textviews. Android treats spannables like basic text so we can easily set the formatted text to the textviews, hence the usage of textviews.

In the layout above, we created five TextView s to hold differently formatted text, we’d go through them one after the other, starting with the bold format. But before that, let’s take a moment to understand the general structure of how spannables are set up and how the formatting takes place.

How are spannables set up?

When it comes to using Spannables, we can create them in three ways. By using any of the SpannedString, SpannableString and the SpannableStringBuilder classes. Each of these classes has features that differentiate them, the differences are outlined below.

  1. SpannedString — This class does not allow modifications to the text set into the Spannable. No modifications to the text and no modifications to the design (the spans). In other words, it’s immutable.
  2. SpannableString — This class allows for modifications of the design/styles added to the text, but no direct modification of the text used by the Spannable.
  3. SpannableStringBuilder — This class allows for modifications to the text itself and its designs.

The key takeaway here can be summarised as such:

Use SpannedString when you want to set the text and design once without any further modifications, SpannableString when you won’t be making any changes to the text but to the design and SpannableStringBuilder when you’d be making changes to both the underlying text and the design.

Format For Spannables

Now that we have a clear view of the types of spans we can use, let’s dig deeper into their general structure. Spannables you’d use in the future generally come in this fashion:

Читайте также:  Как пользоваться штрих кодами для андроид

Our spannable object provides a setSpan method we can use to apply different span styles to sections of our text. It takes in four arguments, let’s dive in!

  1. what — This refers to the actual span style we would be applying, think of it as an object that instructs our spannable to apply a certain style to the text.
  2. startIndex — Remember our spannables deal with text? Right. The startIndex parameter denotes the index where the text to be formatted begins. Say the text to be formatted is thyself in steady thyself , we could deduce that the startIndex for this text is 7.
  3. endIndex — This does pretty much the opposite of what the startIndex does, it denotes the index of the character that ends the text to be formatted. Using our example from our startIndex explanation, our endIndex is the index of the letter f in thyself , so that would make it 13.
  4. flags — This indicates how the text provided to the spannables should be treated, we have various values that can be assigned to this parameter position, examples are SPAN_EXCLUSIVE_EXCLUSIVE , SPAN_EXCLUSIVE_INCLUSIVE , SPAN_INCLUSIVE_INCLUSIVE and many more. A detailed explanation is provided below.

Spannable Flags

As explained above, spannable flags indicate how the Spanning process should treat the text to be spanned. Some of the flags we can use are explained below.

  1. SPAN_INCLUSIVE_INCLUSIVE: This allows new text to be added to both the starting and end points of the text.
  2. SPAN_INCLUSIVE_EXCLUSIVE: This allows new text to be added to the starting point, but not to the end.
  3. SPAN_EXCLUSIVE_INCLUSIVE: This does not allow text to be added to the starting point, but the end.
  4. SPAN_EXCLUSIVE_EXCLUSIVE: This does not allow text to be added to the start and end points of the text.

You can read about other span flags here, since we have covered the general structure of applying spans, and dug deep into it’s required parameters, this seems like a good time to write our first span.

The Bold Span

Let’s start by retrieving a reference to a TextView in our layout, and then setting up a function to apply the spanning. We do that by writing:

Источник

Использование RichText в Android. Spannable

Привет Хабраобщество! Эта статья об использовании Spannable в Android. Предназначен он для стилизации текста. Если Вас интересует как реализовать нечто подобное:

тогда добро пожаловать под кат. Статья ориентированная на разработчиков, у которых нет большого опыта разработки под Android.

Теория

Spannable — интерфейс, который описывает маркировку обычного текста некими объектами. Задание этих объектов заключается в присвоению части текста некоторого определенного стиля. Такими маркировочными объектами могут быть экземпляры классов, которые реализуют интерфейс ParcelableSpan. Добавление маркировки осуществляется методом:

Удаление, соответственно, методом:

Теории немного, перейдем сразу к практике.

Практика

Для освоения практики необходимо создать android проект или открыть уже существующий. Я создал чистый проект, на главную activity разместил один TextView. Идем в метод, где будем инициализировать наш TextView (у меня onCreate) и добавляем следующий текст:

Итак, разберемся что же мы написали. SpannableString — класс, который реализует интерфейс Spannable (с другими реализациями можно ознакомится на сайте официальной документации). UnderlineSpan — реализация ParcelableSpan, маркирует часть текста как подчеркнутый (в нашем примере это с 8-ой по 17-тую букву). Флаг Spanned.SPAN_EXCLUSIVE_EXCLUSIVE обозначает, что наш span не будет расширятся на вставки текста слева или справа от маркированной части. (Со всеми флагами можно ознакомится на официальном сайте, при работе с текстами readonly они не столь важны).

Читайте также:  Догкоин кошелек для андроид

Также здесь ми использовали еще одну реализацию ParcelableSpanStyleSpan. Как вы уже догадались, с его помощью можно маркировать текст как полужирный (Typeface.BOLD) или курсив (Typeface.ITALIC).

С кодом ми разобрались, запускаем наш проект и смотрим на результат. Текст должен выглядеть следующим образом:

Хорошо, идем дальше: добавим на наше activity кнопку, а в инициализирующий метод следующий текст:

На этот раз не будем разбирать код, ничего нового уже для нас нет. Мы использовали маркировку курсивом, которую я описал выше. Запускаем, смотрим.

Мы смогли вывести стилизованный текст на кнопку.

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

Здесь у нас появляется новый класс — ForegroundColorSpan, который задает цвет нашему тексту, в примере мы задали зеленой. Мы его используем в паре с StyleSpan. Запускаем приложение, смотрим на результат.

Мы смогли запихнуть стилизованный текст даже в Toast. Также мы показали, что для одной части текста можно использовать несколько маркировок со стилями.

Вместо заключения

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

Целью статьи было в доступной форме показать столь сильный и простой инструмент для стилизации своего приложения разработчикам, которые не знали о его существовании или просто не использовали его. Надеюсь что статья будет полезна.

Источник

Русские Блоги

Руководство по Android SpannableString и SpannableStringBuilder

1. Руководство

1. Применимые объекты

Люди, которые не трогали SpannableString

Люди, которые слышали это, но не знакомы с SpannableString.

2. Структура учебного пособия

  • Введение
  • SpannableString
  • SpannableStringBuilder
  • Фактическая часть
  • Резюме и мысли (автор форсировал время)

2. Текст

1. Введение

Отношения между SpannableString и SpannableStringBuilder аналогичны отношениям String и StringBuilder. Первый неизменен, второй — изменчив. Следовательно, эти два метода в основном одинаковы.

Функция заключается в добавлении цвета, размера, фона и других стилей и специальных событий (событий щелчка) к строке обычных строк. Начнем с примера

Этот пример очень распространен. Когда вы смотрите на него, вы можете подумать, что это всего лишь несколько TextView?

Да, это TextView. Но не несколько, а один. Очень приятно отображать цветной текст только с одним TextView?

В это время некоторые друзья могут сказать: «TextView? Это тоже просто. Я пишу HTML, добавляю несколько стилей цвета и фона, а затем использую Html.fromHtml (). Это непросто. Я хочу, чтобы вы нарушили Span. Какая польза! «

Верно, это может достичь такого эффекта, но не кажется ли вам, что в проекте Android жестко запрограммирована куча html-кода? И после исследования исходного кода Html.fromHtml () я обнаружил, что в этом методе нет ничего загадочного (если DuangDuang может добавлять спецэффекты к тексту, бах! Добавить стиль).

Выше приведен исходный код, который перехватывает часть вызова метода Html.fromHtml (). Внимательные друзья, должно быть, обнаружили, что в нем есть SpannableStringBuilder (). Итак, вся правда раскрыта, оказывается, что этот метод разбирает html и добавляет к нему стили через SpannableStringBuilder. Друзья, которые это видели, научились использовать SpannableStringBuilder очень полезно? 😁

2.SpannableString

Метод использования аналогичен SpannableStringBuilder, просто приведите пример без особых пояснений.

3.SpannableStringBuilder

Главный герой этой главы, хороший друг SpannableString.

Читайте также:  Public abstract class android

Давайте посмотрим на два основных метода

Основной метод настройки стилей. параметр:

  1. what Различные диапазоны и разные диапазоны соответствуют разным стилям, как показано ниже:
  • ForegroundColorSpan: установить цвет текста переднего плана (цвет текста)
  • BackgroundColorSpan: установить цвет фона
  • AbsoluteSizeSpan: установите абсолютный размер текста в пикселях.
  • ClickableSpan: добавьте событие щелчка к тексту (с его помощью можно реализовать событие щелчка по нику пользователя в списке комментариев WeChat Moments)
  • DynamicDrawableSpan :
  • ImageSpan: текст для добавления изображений
  • RelativeSizeSpan: установите относительный размер текста, кратный размеру другого текста.
  • StrikethroughSpan: добавить зачеркивание
  • SubscriptSpan: установить подстрочный текст
  • SuperscriptSpan: установить надстрочный текст
  • URLSpan: гиперссылка настройки текста
  • UnderlineSpan: установить подчеркивание
  1. start Начальная позиция, в которой шаблон вступает в силу, включая эту позицию 3) end Конечная позиция шаблона, не включая Это позиция, поэтому при установке стиля первых 3 символов в строке текста начало: 0, конец: 3. Вместо конца: 2
  2. flags Среди этих нескольких параметров самый трудный для понимания, самый проблемный и самый сложный в работе. в основном имеет следующие четыре значения:
  • Spannable.SPAN_EXCLUSIVE_INCLUSIVE: эффект диапазона не применяется к символам, вводимым перед интервалом, а эффект диапазона применяется к символам, вводимым сзади.
  • Spannable.SPAN_INCLUSIVE_EXCLUSIVE: эффект диапазона применяется к символам, вводимым перед диапазоном, и эффект диапазона не применяется к символам, вводимым сзади.
  • Spannable.SPAN_INCUJSIVE_INCLUSIVE: эффект диапазона применяется к символам, введенным до и после диапазона.
  • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE: эффект диапазона не применяется до и после символов, введенных до и после диапазона. Я видел своих друзей в растерянности, верно? Чем вы пользуетесь до и после? Далее у меня есть две картинки, чтобы все могли понять разницу между этими четырьмя флагами Это необходимо для того, чтобы установить одинаковый диапазон для одного и того же текста. Разница в том, что флаг другой. Одинаковы ли четыре эффекта? «zz» на этом рисунке вводится в EditText. Вы понимаете, объединив введение четырех флагов?
4. Захватывающие боевые моменты.

Лучше всего видны красочные

Говорили, что все писали текст вместе, но вы тайно сделали пластическую операцию по изображению, а!

Не забывайте это предложение: tv.setMovementMethod (LinkMovementMethod.getInstance ()); очень важно.

Кроме того, после установки события щелчка на текст текст будет автоматически подчеркнут. Чтобы удалить подчеркивание по умолчанию, можно использовать следующие методы:

Из-за нехватки места я представлю здесь так много примеров использования Span. Пожалуйста, изучите другие применимые методы Span самостоятельно. В конце концов, вы можете быстро изучить его самостоятельно (я не скажу, что я ленив! ) Кроме того, считаете ли вы, что создавать новые промежутки один за другим сложно и сложно вручную вычислять начало и конец? Вот простой вспомогательный класс для всех.

Хорошо, это все время для рекламы, введите текст ниже: Добро пожаловать, друзья, чтобы использовать вспомогательный класс инструментов, который я написал, адрес gayhub:github.com/zYinux/Spec… После использования библиотеки вам нужно только установить стиль:

Это намного проще? Наконец, мне не нужно беспокоиться о раздражающих началах, концах и флагах. Пожалуйста, перейдите к конкретному использованиюGitHubПроверь, удобно ли ставить звезду милости просим, ​​спасибо

5. Тяни время

Привет друзья! Меня зовут zYinux, и я взял это псевдоним, чтобы отдать дань уважения проекту Linux, получившему известность в ИТ-индустрии. Жалко, что я все еще новичок, который только начал, надеясь подняться на более высокий уровень собственными усилиями. Это второй блог, который я написал, последний — год назад, и я буду много работать, чтобы опубликовать блог в месяц. Пожалуйста, простите меня за плохой текст. Я надеюсь увидеть, что друзья здесь усвоили вышеуказанные знания. Если друзья обнаружат ошибки и упущения в руководстве, свяжитесь со мной для исправления. Группа обмена QQ: 589184413

Источник

Оцените статью