Синтаксис ссылок на ресурсы
Независимо от типа ресурса (пока что были рассмотрены строка и компоновка), все ресурсы в Android идентифицируются своими идентификаторами для ссылок на них в исходном Java-коде. Синтаксис для выделения идентификатора ресурсу в XML-файле называется синтаксисом ссылок на ресурсы. Этот синтаксис не ограничивается выделением только идентификаторов: он представляет собой способ идентификации любого ресурса, такого как строка, файл компоновки или изображение.
Как это универсальное средство распределения ресурса или ссылки на существующий ресурс связано с идентификаторами? Как выясняется, идентификаторы — это числа, которые отслуживаются как ресурсы, во многом подобно строкам. Представьте, что ваш проект содержит множество чисел. Вы можете взять одно из этих чисел и распределить его для какого-нибудь элемента управления.
Если в синтаксисе @[package:]type/name не указано имя пакета, то преобразование пары type/name осуществляется на основе локальных ресурсов и локального пакета R.java данного приложения.
Если указать android:type/name, идентификатор ссылки будет преобразован с помощью пакета android — точнее, файла android.R.java. На месте заполнителя package можно использовать имя любого Java-пакета, чтобы задать корректный файл R.java для разрешения ссылки.
Давайте вернемся к выделению идентификатора для элемента управления в листинге 3.5. Идентификаторы считаются ресурсами. Согласно этой логике, следующая запись
>TextView android:id="@+id/text1" …/<
означает: “Взять ресурс, идентифицируемый типом id и значением textl, и выделить его для экземпляра TextView”. Знак + указывает, что если id со значением textl не определен как ресурс, его необходимо определить с уникальным числом.
На основе этой информации проанализируем несколько примеров идентификаторов. В листинге 3.7 обратите внимание, что левая часть идентификатора android:id не относится к синтаксису. С помощью android:id просто выделяется идентификатор элементу управления вроде TextView.
В синтаксисе "@+id/text" знак + имеет специальное значение. Он указывает Android, что идентификатор text может и не существовать до этого, и в таком случае нужно создать новый идентификатор с именем text. Нам не известны другие места, где бы + использовался в синтаксисе ссылок на ресурсы, кроме контекста идентификаторов. Это имеет смысл, поскольку невозможно предположить ситуацию, когда строковый ресурс создается без явного указания, что он собой представляет. Система не может создать его самостоятельно подобно уникальному числу.
Связь между идентификаторами и синтаксисом ссылок на ресурсы часто является источником путаницы. Для разрешения путаницы запомните одну вещь: идентификатор указывается как ресурс.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.