Этот быстрый совет показывает, как создавать и использовать строковые ресурсы в качестве форматных строк. Вы достигнете этого, создав и сконфигурировав соответствующие строковые ресурсы в XML и используя их программно для предоставления различных типизированных параметров.
Шаг 0: Начало работы
Начните с создания проекта Android. Если вы хотите просто следовать, вы можете найти пример проекта с кодом для форматирования строк .
Шаг 1: Создание строковых ресурсов
Строковые ресурсы часто хранятся в файле /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>
|
Этот файл ресурсов строки определяет две строки. Один для имени приложения, а другой называется привет. Помните, что если ваш строковый ресурс имеет сложные символьные коды, вам может потребоваться заключить в кавычки всю строку. Вы можете добавлять строковые ресурсы форматирования так же, как и обычные строковые ресурсы.
Шаг 2: Зачем использовать строки формата?
Форматирование строк — это удобный способ создать одну строку с переменным содержимым. Это лучше всего иллюстрируется примером. В знак уважения к популярной видеоигре Oregon Trail, давайте посмотрим на печально известное сообщение, которое игроки неизбежно увидели, таща свою семью через Средний Запад:
«Вы стреляли << вставить номер >> фунтов мяса!»
Количество фунтов игрового мяса меняется в зависимости от того, как игрок стреляет. Существует несколько способов (как хороших, так и плохих), чтобы разработчики могли решить эту проблему. Разработчик может:
- Избегайте проблемы полностью и создайте общую строку, уклоняясь от специфики: «Вы что-то стреляли!»
- Создайте два строковых ресурса (например, «Вы стреляли» и «Фунты мяса!») И программно сложите их в ряд.
- Приготовьте свое собственное решение, выполнив некоторую чёрную магию с помощью методов поиска и замены строк (например, «Вы стреляли ## PUT_NUM ## фунтов мяса!» И метод String replace ()).
- Спросите себя, работают ли строки формата в файлах ресурсов Android, и прочитайте это руководство.
Мы не придумали эти подходы. Мы видели их всех. Только два из этих подходов являются разумными: первый и последний.
Иногда правильный ответ — это простой и простой ответ. Как правило, это лучший подход, когда передаваемая информация может быть сделана общей, без потери приложения. В других случаях вам необходимо сообщить важную и конкретную информацию пользователю. В Oregon Trail, если вы выстрелили 2 фунта мяса, вы продолжите охоту (или умрете от голода), в то время как, если вы выстрелили 1234 фунта игры, ваш фургон в любом случае был максимизирован, так что вы, скорее всего, решили бы двигаться дальше вниз тропа (с полным животом).
Вы можете спросить, почему сэндвич-подход не так хорош. Во-первых, использование двух строк загромождает ваши файлы ресурсов и затрудняет их обслуживание. Во-вторых, когда вы переходите на интернационализацию своего приложения, вы можете обнаружить, что эти две строки больше не подходят — это может стать очень сложным, если ваша строка также имеет более одного параметра. Создать собственное решение — значит ввести больше кода для обслуживания и предположить, что вы можете выполнять манипуляции со строками лучше, чем стандартные библиотеки Java.
Лучше использовать стандартные методы для форматирования строк и создать однострочный ресурс с параметрами.
Шаг 3: Создание строк формата
Строки формата могут иметь один или несколько параметров. Каждый параметр пронумерован и напечатан. Номер параметра указывается с использованием%, за которым следует номер параметра, который соответствует порядку, в котором значения параметров будут предоставляться программно. Например, первый параметр будет% 1, второй% 2 и т. Д. Второй элемент, который имеет каждый параметр, — это тип (например, printf () в стиле C, который задается символом $ и буквой, указывающей этот тип.
Например, строка будет $ s; число может быть $ d. Следовательно, наш строковый ресурс может быть создан как:
1
|
<string name=»meatShootingMessage»>You shot %1$d pounds of meat!</string>
|
Шаг 4. Предоставление форматных строк с числовыми параметрами
Теперь, когда вы создали правильную строку формата, вы можете загрузить ее, отформатировать и отобразить пользователям. Следующий код загружает строковый ресурс, предоставляет единственный числовой параметр и генерирует завершенную строку:
int numPoundsMeat = 123; String strMeatFormat = getResources (). GetString (R.string.meatShootingMessage); String strMeatMsg = String.format (strMeatFormat, numPoundsMeat);
Шаг 5. Предоставление форматных строк с несколькими параметрами
Давайте попробуем другой пример. На этот раз мы создадим еще два ресурса форматной строки, каждый с двумя параметрами. В Oregon Trail семья игрока часто болела и иногда умирала. Два сообщения, которые часто видели игроки, звучали примерно так:
«<< имя персонажа >> имеет << имя заболевания или травмы >>!»
и
«<< имя болезни или травмы >> убило << имя персонажа >>!»
Создание двух строковых ресурсов формата довольно просто:
1
2
|
<string name=»diseaseMessage»>%1$s has %2$s!</string>
<string name=»diseaseMessage2″>%1$s has killed %2$s!</string>
|
Следующий код загружает строковые ресурсы, предоставляет параметры и генерирует завершенные строки:
Строка name = "Салли"; Струнная болезнь = "Брюшной тиф"; String strDisease1Format = getResources (). GetString (R.string.diseaseMessage); String strDisease1Msg = String.format (strDisease1Format, имя, болезнь); String strDisease2Format = getResources (). GetString (R.string.diseaseMessage2); String strDisease2Msg = String.format (strDisease2Format, болезнь, имя);
Бонус: Порядок форматирования строковых параметров гибкий и дружественный к локали
На последнем шаге вы могли заметить, что параметры были поменяны местами во второй строке (strDisease2Msg). Это немного раздражает, нет? К счастью, нет абсолютно никакой причины, по которой содержимое строки формата должно определять порядок параметров. Вместо этого просто перечислите параметры в строковом формате в порядке, в котором вы хотите их указать. Например, если вы всегда хотите указать имя персонажа, за которым следует имя болезни, определите строку формата следующим образом:
1
|
<string name=»diseaseMessage2″>%2$s has killed %1$s!</string>
|
Следовательно, ваш код будет выглядеть так:
String strDisease2Msg = String.format (strDisease2Format, имя, болезнь);
Это значительно облегчает работу разработчика. Кроме того, с точки зрения перевода строки, многие параметры строки в любом случае перемешаны на разных языках.
Вывод
В этом кратком совете вы узнали, как использовать строки формата в качестве строковых ресурсов Android. Строки форматирования позволяют использовать гибкие и поддерживаемые ресурсы приложения.
Об авторах
Разработчики мобильных приложений Лорен Дарси и Шейн Кондер являются соавторами нескольких книг по разработке Android: углубленная книга по программированию под названием « Разработка беспроводных приложений для Android» и « Разработка Android-приложений Sams TeachYourself за 24 часа» . Когда они не пишут, они тратят свое время на разработку мобильного программного обеспечения в своей компании и оказание консультационных услуг. С ними можно связаться по электронной почте [email protected] , через их блог на androidbook.blogspot.com и в Twitter @androidwireless .