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

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

ОС Android позволяет определять строки в одном или нескольких XML-файлах ресурсов. Эти XML-файлы с определениями строковых ресурсов находятся в подкаталоге /res/values. Имена таких XML-файлов могут быть произвольными, хотя обычно это файл strings.xml.

На заметку! В некоторых выпусках Eclipse узел >resources< необходимо уточнять с помощью спецификации xmlns. Похоже, неважно, на что указывает этот xmlns — главное, чтобы он был. Например, годятся следующие два варианта:

>resources xmlns="schemas.android.com/apk/res/android" <

или

>resources xmlns="default namespace" <

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

При создании или обновлении этого файла подключаемый модуль Eclipse ADT автоматически создает или обновляет Java-класс в корневом пакете приложения по имени R.java с уникальными идентификаторами для двух указанных строковых ресурсов. Обратите внимание на размещение файла R.java в следующем примере, где приведена высокоуровневая структура каталогов для проекта, скажем, MyProject.

MyProject

\src

\com\mycompany\android\my-root-package

\com\mycompany\android\my-root-package\another-package

\gen

\com\mycompany\android\my-root-package\R.java

\assets

\res

\AndroidManifest.xml … и т.д.

На заметку! Независимо от количества файлов ресурсов, имеется только один файл R.java.

Для начала обратите внимание на то, каким образом в R.java определен класс верхнего уровня в корневом пакете: public static final class R. В этом внешнем классе R определяется внутренний класс, а именно — static final class string. В R.java этот внутренний статический класс создается в качестве пространства имен для хранения идентификаторов строковых ресурсов.

Две переменные типа static final int с именами hello и app_name — это идентификаторы ресурсов, которые представляют соответствующие строковые ресурсы. Эти идентификаторы ресурсов можно использовать в любом месте исходного кода с помощью следующей структуры:

R.string.hello

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

Большинство приложений, приводимых в качестве примеров, определяют все строки в одном файле strings.xml, но это просто соглашение. Android может принимать любое количество произвольных файлов, если эти файлы имеют структуру XML- файлов, похожую на показанную в листинге 3.1, и эти файлы находятся в подкаталоге /res/values.

Структура этих файлов проста. Имеется корневой узел >resources<, под которым находятся один или несколько дочерних элементов >string<. Каждый элемент или узел >string< имеет соответствующее имя, которое преобразуется в атрибут id в файле R.java.

Чтобы проверить возможность наличия нескольких файлов строковых ресурсов в этом подкаталоге, можно поместить туда же еще один файл по имени stringsl.xml с содержимым, приведенным в листинге 3.3.

Листинг 3.3. Пример дополнительного файла strings.xml

>?xml version="1.0" encoding="utf-8"?<

>resources<

>string name="hello1"/string<

>string name="app name1"/string<

>/resources<

Подключаемый модуль Eclipse ADT проверяет уникальность этих идентификаторов на этапе компиляции и помещает их в файл R.java в виде двух дополнительных констант R.string.hellolи R.string.app_name1.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

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