Статьи

Совет по Android SDK: форматирование строк ресурсов

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

Начните с создания проекта Android. Если вы хотите просто следовать, вы можете найти пример проекта с кодом для форматирования строк .

Строковые ресурсы часто хранятся в файле /res/values/strings.xml иерархии ресурсов. Любые строки, которые вы добавляете в файл strings.xml, будут доступны в вашем приложении. Ниже приведен пример файла strings.xml:

1
<?xml version=»1.0″ encoding=»utf-8″?> <resources> <string name=»app_name»>Format Strings</string> <string name=»hello»>Yo!</string> </resources>

Этот файл ресурсов строки определяет две строки. Один для имени приложения, а другой называется привет. Помните, что если ваш строковый ресурс имеет сложные символьные коды, вам может потребоваться заключить в кавычки всю строку. Вы можете добавлять строковые ресурсы форматирования так же, как и обычные строковые ресурсы.

Форматирование строк — это удобный способ создать одну строку с переменным содержимым. Это лучше всего иллюстрируется примером. В знак уважения к популярной видеоигре Oregon Trail, давайте посмотрим на печально известное сообщение, которое игроки неизбежно увидели, таща свою семью через Средний Запад:

«Вы стреляли << вставить номер >> фунтов мяса!»

Количество фунтов игрового мяса меняется в зависимости от того, как игрок стреляет. Существует несколько способов (как хороших, так и плохих), чтобы разработчики могли решить эту проблему. Разработчик может:

  • Избегайте проблемы полностью и создайте общую строку, уклоняясь от специфики: «Вы что-то стреляли!»
  • Создайте два строковых ресурса (например, «Вы стреляли» и «Фунты мяса!») И программно сложите их в ряд.
  • Приготовьте свое собственное решение, выполнив некоторую чёрную магию с помощью методов поиска и замены строк (например, «Вы стреляли ## PUT_NUM ## фунтов мяса!» И метод String replace ()).
  • Спросите себя, работают ли строки формата в файлах ресурсов Android, и прочитайте это руководство.

Мы не придумали эти подходы. Мы видели их всех. Только два из этих подходов являются разумными: первый и последний.

Иногда правильный ответ — это простой и простой ответ. Как правило, это лучший подход, когда передаваемая информация может быть сделана общей, без потери приложения. В других случаях вам необходимо сообщить важную и конкретную информацию пользователю. В Oregon Trail, если вы выстрелили 2 фунта мяса, вы продолжите охоту (или умрете от голода), в то время как, если вы выстрелили 1234 фунта игры, ваш фургон в любом случае был максимизирован, так что вы, скорее всего, решили бы двигаться дальше вниз тропа (с полным животом).

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

Лучше использовать стандартные методы для форматирования строк и создать однострочный ресурс с параметрами.

Строки формата могут иметь один или несколько параметров. Каждый параметр пронумерован и напечатан. Номер параметра указывается с использованием%, за которым следует номер параметра, который соответствует порядку, в котором значения параметров будут предоставляться программно. Например, первый параметр будет% 1, второй% 2 и т. Д. Второй элемент, который имеет каждый параметр, — это тип (например, printf () в стиле C, который задается символом $ и буквой, указывающей этот тип.

Например, строка будет $ s; число может быть $ d. Следовательно, наш строковый ресурс может быть создан как:

1
<string name=»meatShootingMessage»>You shot %1$d pounds of meat!</string>

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

Давайте попробуем другой пример. На этот раз мы создадим еще два ресурса форматной строки, каждый с двумя параметрами. В Oregon Trail семья игрока часто болела и иногда умирала. Два сообщения, которые часто видели игроки, звучали примерно так:

«<< имя персонажа >> имеет << имя заболевания или травмы >>!»
и
«<< имя болезни или травмы >> убило << имя персонажа >>!»

Создание двух строковых ресурсов формата довольно просто:

1
2
<string name=»diseaseMessage»>%1$s has %2$s!</string>
<string name=»diseaseMessage2″>%1$s has killed %2$s!</string>

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

Вывод строки в формате Android SDK

На последнем шаге вы могли заметить, что параметры были поменяны местами во второй строке (strDisease2Msg). Это немного раздражает, нет? К счастью, нет абсолютно никакой причины, по которой содержимое строки формата должно определять порядок параметров. Вместо этого просто перечислите параметры в строковом формате в порядке, в котором вы хотите их указать. Например, если вы всегда хотите указать имя персонажа, за которым следует имя болезни, определите строку формата следующим образом:

1
<string name=»diseaseMessage2″>%2$s has killed %1$s!</string>

Следовательно, ваш код будет выглядеть так:

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

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

Разработчики мобильных приложений Лорен Дарси и Шейн Кондер являются соавторами нескольких книг по разработке Android: углубленная книга по программированию под названием « Разработка беспроводных приложений для Android» и « Разработка Android-приложений Sams TeachYourself за 24 часа» . Когда они не пишут, они тратят свое время на разработку мобильного программного обеспечения в своей компании и оказание консультационных услуг. С ними можно связаться по электронной почте [email protected] , через их блог на androidbook.blogspot.com и в Twitter @androidwireless .

Купить Android-разработку беспроводных приложений, 2-е издание Купить Sam's Teach Yourself для Android-разработки приложений в течение 24 часов Код Мамламбо в Код-Каньоне