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

что diffirence между @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

Are @id/ и @android:id/ то же самое?

13 ответов


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

Подробнее

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

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

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

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

больше Информация Снова

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


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

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

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

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

и

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

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

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

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

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

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

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


Короче

android:id="@+id/my_button"

+ id плюс знак говорит android, чтобы добавить или создать новый идентификатор в ресурсах.

пока

android:layout_below="@id/my_button"

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


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

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


его очень просто:

"@+..."- создать новый

"@..."- ссылка на существующий

источник: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue


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

android:id="@+id/my_button"

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

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


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

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


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

@id / referencing ID в вашем приложении, @android: id / referencing элемент в платформе Android.

Eclipse-это неправильно.


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

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

надеюсь, что это помогает :).


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


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

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


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

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

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

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

в этом случае мы используем @+id для создания 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 создается в другом представлении, и при определении spinner мы ссылаемся на id, созданный выше.

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