Разница между "@id/" и "@+ id/" в Android

Что такое различие между @id/ и @+id/?

В @+id/ символ плюс + указывает создать новое имя ресурса и добавить его в файл R.java, но как насчет @id/? Из документации ID: при ссылке на идентификатор ресурса Android вам не нужен символ плюса, но он должен добавить пространство имен пакета android, так:

android:id="@android:id/list"

Но на изображении ниже Eclipse не предлагает никаких @android:id/.

Image showing the suggestion for the @/id and @+/id

Являются ли @id/ и @android:id/ одинаковыми?

Ответ 1

вы ссылаетесь на Android resources, которые уже определены в системе Android, с @android:id/.., а для доступа к ресурсам, которые вы определили/создали в своем проекте, вы используете @id/..

Дополнительная информация

В соответствии с вашими разъяснениями в чате вы сказали, что у вас есть такая проблема:

Если мы используем android:id="@id/layout_item_id", это не сработает. Вместо этого @+id/ работает так, какая разница здесь? И это был мой первоначальный вопрос.

Ну, это зависит от контекста, когда вы используете XML-атрибут android:id, тогда вы указываете новый идентификатор и инструктируете парсер (или называете его создателем) для создания новой записи в R.java, таким образом, вы должны включить знак +.

В то время как в другом случае, например android:layout_below="@id/myTextView", вы ссылаетесь на уже созданный идентификатор, поэтому парсер связывает это с уже созданным идентификатором в R.java.

Подробнее снова

Как вы сказали в своем чате, обратите внимание, что android:layout_below="@id/myTextView" не будет распознавать элемент с id myTextView, если он написан после того элемента, в котором вы его используете.

Ответ 2

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

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

Ответ 3

Иногда вы видите ссылки в ваших файлах макетов, например:

<listview id="@+id/android:list">

и

<listview id="@android:id/list">

Какая разница?

.. Я рад, что вы спросили ☺

@+id/foo означает, что вы создаете идентификатор с именем foo в пространстве имен вашего приложения. Вы можете обратиться к нему с помощью @id/foo. @android:id/foo означает, что вы ссылаетесь на идентификатор, определенный в пространстве имен android.

"+" означает создание символа, если он еще не существует. Вы не нуждаетесь в этом (и не должны его использовать) при ссылке на android: символы, потому что они уже определены для вас платформой, и вы все равно не можете сделать свой собственный в этом пространстве имен.

Это пространство имен является пространством имен структуры. например, вам нужно использовать @android:id/list, потому что этот id Framework ожидает найти.. (фреймворк знает только об идентификаторах в пространстве имен android.)

Полностью скопирован из этого источника

Ответ 4

Короче

android:id="@+id/my_button"
Значок

+ id Plus указывает, что андроид добавляет или создает новый идентификатор в ресурсах.

while

android:layout_below="@id/my_button"

он просто помогает ссылаться на уже сгенерированный идентификатор.

Ответ 5

Знак плюса (+) до того, как тип ресурса нужен только тогда, когда вы впервые определяете идентификатор ресурса. При компиляции приложения инструменты SDK используют имя ID для создания нового идентификатора ресурса в файле проекта R.java, который ссылается на элемент EditText. Если идентификатор ресурса объявлен один раз таким образом, другим ссылкам на идентификатор не нужен знак плюса. Использование знака "плюс" необходимо только при указании нового идентификатора ресурса и не требуемого для конкретных ресурсов, таких как строки или макеты. Дополнительную информацию об объектах ресурсов см. В боковом поле.

От: https://developer.android.com/training/basics/firstapp/building-ui.html

Ответ 7

В Руководство разработчика:

android:id="@+id/my_button"

Символ at (@) в начале строки указывает, что синтаксический анализатор XML должен анализировать и расширять остальную строку идентификатора и идентифицировать его как ресурс идентификатора. Символ плюса (+) означает, что это новое имя ресурса, которое должно быть создано и добавлено к нашим ресурсам (в файле R.java). Существует множество других ресурсов ID, которые предлагаются платформой Android. При ссылке на идентификатор ресурса Android вам не нужен символ плюса, но он должен добавить пространство имен пакетов android, например:

android:id="@android:id/empty"

Ответ 8

Там ошибка с Eclipse, где иногда, если вы только что создали новый @+id/.., он не будет немедленно добавлен в файл R.java даже после чистого создания проекта. Решением является перезапуск Eclipse.

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

Ответ 9

@id/и @android: id/не то же самое.

@id/ссылочный идентификатор в вашем приложении, @android: id/ссылка на элемент в платформе Android.

Eclipse ошибочен.

Ответ 10

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

Теперь, когда вы используете @id/для объекта XML, он пытается ссылаться на идентификатор, который уже зарегистрирован в файлах значений. С другой стороны, когда вы используете @+ id/, он регистрирует новый идентификатор в файлах значений, как это подразумевается символом "+".

Надеюсь, это поможет:).

Ответ 11

Если элемент представления выполняет ту же операцию, вы можете использовать @+ id для каждой записи в любом макете, потому что во время компиляции нескольких @+ id/foo файл R.java создает только одно перечисление. Например, если у меня есть кнопка сохранения на каждой странице, которая выполняет ту же операцию, я использую android: id = "@+ id/button_save" в каждом макете. Файл R.java имеет только одну запись для кнопки button.save.

Ответ 12

Разница между "@+ id/" и "@id/" в Android

Первый используется для создания идентификатора конкретного компонента ui, а другой используется для ссылки на конкретный компонент

Ответ 13

Разница между @+id и @id:

@+id используется для создания идентификатора для представления в файле R.java.

@id используется для ссылки на идентификатор, созданный для представления в файле R.java.

Мы используем @+id с android: id = "", но что, если идентификатор не создан, и мы обращаемся к нему перед созданием (Forward Referencing).

В этом случае мы используем @+id для создания идентификатора и при определении представления мы должны ссылаться на него.

Пожалуйста, обратитесь к приведенному ниже коду:

<RelativeLayout>

     <TextView
        android:id="@+id/dates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/spinner" />

   <Spinner
     android:id="@id/spinner"
     android:layout_width="96dp"
     android:layout_height="wrap_content"
     android:layout_below="@id/name"
     android:layout_alignParentRight="true" />

</RelativeLayout>

В приведенном выше коде id для Spinner @+id/spinner создается в другом представлении, а при определении счетчика мы ссылаемся на идентификатор, созданный выше.

Таким образом, мы должны создать идентификатор, если мы используем представление перед созданием представления.