Когда вы должны использовать `@ + id` вместо` @ id`?

У меня есть куча View s в <merge> , и я включил этот <merge> в RelativeLayout . Я пытаюсь обратиться к идентификаторам включенных в них View s, чтобы выступать в качестве якорей для моего другого View s, но Eclipse жалуется, что идентификаторы не разрешаются. Я нашел обходное решение, используя @+id а не @id когда я сначала ссылаюсь на них, а не когда я фактически определяю объекты, на которые они ссылаются. Я уже определил два ID в Style и во включенном <merge> где они объявлены, поэтому он чувствует себя немного неэффективно, если я повторяю определение идентификатора.

Это правильный способ сделать это? Я предполагаю, что это плохо, потому что «+» – это еще одна инициализация. Моя нынешняя гипотеза заключается в том, что при первом использовании идентификатора вам следует использовать @+id а не когда вы инициализируете объект, который будет представлять идентификатор, немного похожий на C/C++ и то, как им требуется хотя бы прототип функции в строках До фактического кода, который использует эту функцию.

Еще один вопрос, который у меня возникает, когда вы используете GUI-основанный пользовательский интерфейс Eclipse, я заметил, что они всегда используют @+id а не @id . Является ли это приемлемым, потому что это кажется мне неэффективным; Это R.id на то, что приложение будет тратить больше времени на определение того, был ли ID R.id в R.id .

Использование формата @+id сообщает компилятору Android о назначении идентификатора вашему элементу, он фактически не является идентификатором. Поэтому, если я использую @+id/myNewId компилятор ресурсов создаст новый идентификатор с именем myNewId и предоставит ему номер. Действительный номер можно получить из вашего кода как R.id.myNewId .

Если вы используете @id , компилятор будет искать R.id.id Вы можете определить свой собственный идентификатор в файлах XML, как описано здесь: http://developer.android.com/guide/topics/resources/more-resources.html#Id . Вы можете создать свой собственный файл в res/values/[your_filename].xml :

 <?xml version="1.0" encoding="utf-8"?> <resources> <item type="id" name="id_name" /> </resources> 

А затем обратитесь к @id_name , например

Вы также можете использовать идентификаторы, определенные в пространстве имен Android: @android:id/empty

Это хорошо объяснено в документации по Android: http://developer.android.com/guide/topics/ui/declaring-layout.html#id

Здесь также есть некоторые дополнительные обсуждения: android: id, что является плюсом для