Строковые ресурсы

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

String
XML ресурс для предоставления одной строки.
String Array
XML ресурс для предоставления массива строк.
Quantity String (Plurals)
XML ресурс, содержащий различные значения строки для множественных чисел.

Ко всем строкам могут применяться стили и форматирование, о них сказано ниже.

String (одиночная строка)

Примечание: строка это простой ресурс, на который можно ссылаться с помощью значения, указанного в атрибуте name (а не с помощью имени XML файла). Поэтому вы можете объединять несколько строковых ресурсов в одном файле внутри элемента <resources>.

МЕСТОПОЛОЖЕНИЕ ФАЙЛА:

res/values/filename.xml

Файл может иметь произвольное имя. В качестве идентификатора ресурса используется значение атрибута name.

ТИП РЕСУРСА ПОСЛЕ КОМПИЛЯЦИИ:
Указатель на объект типа String.
ССЫЛКА НА РЕСУРС:

В Java: R.string.string_name

В XML: @string/string_name

СИНТАКСИС:
ЭЛЕМЕНТЫ:
<resources>
Обязательный. Является корневым элементом. Не имеет атрибутов.
<string>

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

Атрибуты:

name
Название строки. Данное значение используется в качестве идентификатора строкового ресурса.
ПРИМЕР:

XML файл res/values/strings.xml

Пример использования описанного выше ресурса:

Пример получения строки в коде:

Вы можете использовать методы getString(int) и getText(int) для получения строки. Метод getText(int) возвращает текст со всеми примененными стилями.

String Array (строковый массив)

Описывает массив строк, доступный из приложения.

Примечание: массив строк это простой ресурс, на который можно ссылаться с помощью значения, указанного в атрибуте name (а не с помощью имени XML файла). Поэтому вы можете объединять несколько массивов строк в одном файле внутри элемента <resources>.

МЕСТОПОЛОЖЕНИЕ ФАЙЛА:

res/values/filename.xml

Файл может иметь произвольное имя. В качестве идентификатора ресурса используется значение атрибута name.

ТИП РЕСУРСА ПОСЛЕ КОМПИЛЯЦИИ

Указатель на массив объектов типа String.

ССЫЛКА НА РЕСУРС:
В Java: R.array.string_array_name
СИНТАКСИС:
ЭЛЕМЕНТЫ:
<resources>
Обязательный. Является корневым элементом. Не имеет атрибутов.
<string-array>

Описывает массив строк. Включает в себя один или несколько элементов <item>.

Атрибуты:

name
Название массива. Значение используется в качестве идентификатора ресурса.
<item>
Строка, включающая теги стилизации. В качестве значения может использоваться ссылка на другой строковый ресурс. Должен быть дочерним по отношению к элементу <string-array>. Не забывайте экранировать апострофы и кавычки. Не имеет атрибутов.
ПРИМЕР:

XML файл res/values/strings.xml

В коде может использоваться следующим образом:

Quantity Strings (Количественные строки)

В различных языках существуют различные грамматические правила наименования количественных строк. Например, в русском языке мы пишем “1 книгА”, “2 книгИ”, “10 книг”. Такие различия между написанием единственного и множественного числа не являются исключением и в других языках. Android поддерживает полный набор: zero, one, two, few, many и other.

Правила для написания числа могут быть весьма сложными, поэтому Android предоставляет такие методы, как getQuantityString() для выбора подходящего ресурса.

На самом деле, часто можно избежать использования количественных строк, используя форму записи вроде “книги: 10″.

Примечание: количественные строки это простой ресурс, на который можно ссылаться с помощью значения, указанного в атрибуте name (а не с помощью имени XML файла). Поэтому вы можете объединять несколько количественных строк в одном файле внутри элемента <resources>.

МЕСТОПОЛОЖЕНИЕ ФАЙЛА:

res/values/filename.xml

Имя файла может быть произвольным. В качестве идентификатора ресурса используется значение атрибута name.

ССЫЛКА НА РЕСУРС:
В Java: R.plurals.plural_name
СИНТАКСИС:
ЭЛЕМЕНТЫ:
<resources>
Обязательный. Является корневым элементом. Не содержит атрибутов.
<plurals>

Коллекция строк, в которых каждая строка зависит от количества. Включает один или несколько элементов <item>.

Атрибуты:

name
Название для пары строк. Значение используется в качестве идентификатора ресурса.
<item>

Строка. Значение может содержать ссылку на другой строковый ресурс. Является дочерним по отношению к элементу <plurals>. Не забывайте экранировать апострофы и кавычки.

Атрибуты:

quantity

Значение указывает когда должна использоваться строка. Допустимые значения приведены в таблице:

Значение Описание
zero Если язык имеет особую форму числа 0.
one Если язык имеет особую форму числа 1.
two Если язык имеет особую форму числа 2.
few Если язык имеет особую числовую форму “немного”.
many Если язык имеет особую числовую форму “много”.
other Если язык не требует особой формы.
ПРИМЕР:

XML файл res/values/strings.xml

Еще пример для польского языка. XML файл res/values-pl/strings.xml

Ресурс можно использовать в коде следующим образом:

При использовании метода getQuantityString(), необходимо передать count дважды, если строка включает спецификатор числа. Например, для строки "%d songs found", первый параметр count выбирает соответствующую количественную строку, а второй параметр count заменяет спецификатор %d. Если количественная строка не содержит спецификатор числа, нет необходимости указывать третий параметр метода getQuantityString.

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

В данном разделе рассмотрено несколько важных вещей о форматировании и стилизации строковых ресурсов.

Экранирование апострофов и кавычек

Если строка содержит апострофы или кавычки, вам необходимо их экранировать, например:

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

Если вам нужно отформатировать строку с использованием String.format(String, Object…), вы можете вставить в нее аргументы форматирования. Например:

В данном примере, строка имеет два аргумента: %l$s это строка и %2$d десятичное число. Вы можете применить форматирование в коде, например так:

Стилизация с помощью HTML разметки

Вы можете добавить HTML разметку к вашим строкам. Например:

Поддерживаются следующие теги:

  • <b> для жирного текста.
  • <i> для наклонного текста.
  • <u> для подчеркнутого текста.

Иногда может понадобиться стилизовать текстовый ресурс, который также имеет форматированную строку. В обычной ситуации это не работает, поскольку метод String.format(String, Object…) удаляет всю информацию о стилях. Обойти эту проблему можно экранировав HTML теги, а затем восстановить их с помощью метода fromHtml(String) после форматирования. Например:

  1. Экранируйте строки:

    В данной строке добавлен тег <b>. Помните, что открывающая скобка должна быть заменена на &lt;

  2. Отформатируйте строку, а затем вызовите метод fromHtml(String), чтобы конвертировать теги в стиль текста:

Поскольку метод fromHtml(String) форматирует все HTML вставки, убедитесь, что экранировали все возможные HTML символы в строке, используя htmlEncode(String). Например, если вы передаете строковый аргумент в метод String.format(), который может содержать символы вроде “<” или “&”, они должны быть экранированы прежде, чем произойдет форматирование. Так что, когда отформатированная строка проходит через метод fromHtml(String), символы выглядят так, как они были первоначально написаны. Например:

Стилизация с использованием Spannable

Spannable это текстовый объект, который вы можете стилизовать с помощью свойств шрифта, вроде цвета или размера. Используйте объект типа SpannableStringBuilder для создания текста, а затем применяйте стили, определенные в пакете android.text.style.

Вы можете использовать следующие методы-помощники для создания текста:

Следующие методы bold, italic и color показывают как вызывать вспомогательные методы для применения стилей, описанных в пакете android.text.style. Вы можете создать похожие методы для других типов стилей.

И наконец приведем пример как создавать цепочки таких методов для создания последовательности символов, в которых к отдельным словам применяется различный стиль:

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