В чем разница между
@id/
и@+id/
?
В @+id/
символе плюса +
указывает на создание нового имени ресурса и добавление в R.java
файл, но как насчет @id/
? Из документации ID
: при обращении к ресурсу Android ID
вам не нужен символ плюс, но вы должны добавить пространство имен пакета Android, например:
android:id="@android:id/list"
Но на изображении ниже Eclipse не предлагает какого-либо вида @android:id/
.
Есть
@id/
и@android:id/
то же самое?
android
android-xml
Викас Патидар
источник
источник
Ответы:
вы ссылаетесь
Android resources
, которые уже определены в системе Android, с помощью@android:id/..
которого вы можете использовать ресурсы, которые вы определили / создали в своем проекте, используя@id/..
Больше информации
Согласно вашим разъяснениям в чате, вы сказали, что у вас есть такая проблема:
Ну, это зависит от контекста: когда вы используете атрибут XML
android:id
, вы указываете новый идентификатор и инструктируете синтаксический анализатор (или называет его компоновщиком) для создания новой записиR.java
, таким образом, вы должны включить+
знак.В то время как в другом случае, например
android:layout_below="@id/myTextView"
, вы ссылаетесь на идентификатор, который уже был создан, так что парсер связывает его с уже созданным идентификатором вR.java
.Больше информации снова
Как вы сказали в чате, обратите внимание, что
android:layout_below="@id/myTextView"
элемент с идентификатором не будет распознаваться,myTextView
если он будет записан после элемента, в котором вы его используете.источник
android:layout_below="@+id/myTextView"
а затем определить сам элемент с помощьюandroid:id="@id/myTextView"
.+
вlayout_below
так же , какandroid:id
на самом деле хорошо, так ,The '+' means to create the symbol if it doesn't already exist
как Tanmay Мандал отметил в своей Ницце (еще недооценены) ответ. Из-за этого также отсутствует отрицательный эффект времени выполнения (возможно, неизмеримо небольшое увеличение времени компиляции, хотя ^^).знак + - это короткий путь для добавления идентификатора в список идентификаторов ресурсов. В противном случае вам нужно иметь их в XML-файле, как это
источник
<View android:id="@id/my_logo"/>
Если у вас не было файла ресурсов, который я определил выше, вам нужно сделать это как<View android:id="@+id/my_logo"/>
примечание: вам нужно всего лишь сделать + id один раз поэтому если в другом файле макета вы сделали <View android: id = "+ id / my_logo" />, вам не нужно будет включать символ '+' при следующем использовании этого идентификатора в макете.res/drawable/
илиres/layout/
илиres/values/
и как будет называться этот файл? Если у вас есть полезная ссылка по этому поводу, пожалуйста, напишите здесь.Иногда вы видите ссылки в ваших файлах макета, такие как:
<listview id="@+id/android:list">
а также
<listview id="@android:id/list">
Какая разница?
.. Я рад, что ты спросил ☺
@+id/foo
означает, что вы создаете идентификатор с именем foo в пространстве имен вашего приложения. Вы можете обратиться к нему с помощью@id/foo
.@android:id/foo
означает, что вы имеете в виду идентификатор, определенный в пространстве имен Android.«+» Означает создание символа, если он еще не существует. Он не нужен (и не должен использоваться) при обращении к символам android: потому что они уже определены для вас платформой, и вы все равно не можете создать свой собственный в этом пространстве имен.
Это пространство имен является пространством имен платформы. например, вам нужно использовать,
@android:id/list
потому что это идентификатор, который фреймворк ожидает найти .. (фреймворк знает только об идентификаторах в пространстве имен android.)Полностью скопировано из этого источника
источник
Короче говоря
пока
источник
От: https://developer.android.com/training/basics/firstapp/building-ui.html
источник
Это очень просто:
"@ + ..." - создать новый
"@ ..." - ссылка на существующий
Источник: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
источник
Из Руководства разработчика :
At-symbol (
@
) в начале строки указывает, что синтаксический анализатор XML должен проанализировать и развернуть остальную часть строки идентификатора и идентифицировать его как ресурс идентификатора. Символ плюс (+
) означает, что это новое имя ресурса, которое должно быть создано и добавлено к нашим ресурсам (вR.java
файле). Существует ряд других ресурсов ID, предлагаемых платформой Android. При ссылке на идентификатор ресурса Android вам не нужен символ плюс, но вы должны добавитьandroid
пространство имен пакета, например, так:android:id="@android:id/empty"
источник
В Eclipse есть ошибка, из-за которой иногда, если вы только что создали новую
@+id/..
, он не будет сразу добавлен в файл R.java, даже после чистой сборки проекта. Решение состоит в том, чтобы перезапустить Eclipse.Это, я думаю, должно быть решено как можно скорее, потому что это может (и из опыта) запутать некоторых разработчиков в мысли, что с их синтаксисом что-то не так, и попытаться отладить их, даже если на самом деле нечего отлаживать.
источник
Android использует некоторые файлы, называемые ресурсами, где значения хранятся для файлов XML.
Теперь, когда вы используете @ id / для объекта XML, он пытается сослаться на идентификатор, который уже зарегистрирован в файлах значений. С другой стороны, когда вы используете @ + id /, он регистрирует новый идентификатор в файлах значений, как подразумевается символом «+».
Надеюсь это поможет :).
источник
@id/
и@android:id/
не то же самое.@id/
ссылка на идентификатор в вашем приложении,@android:id/
ссылка на элемент на платформе Android.Затмение не так.
источник
@id/ referencing ID in your application
Eclise дает,Error: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
когда мы используем его для ссылки на ресурс приложения. Так в чем разница между@id/
и@+id/
? Как вы могли бы сказать, что затмение неправильно?@id/
только в случаеRelativeLayout
Разница между
@+id
и@id
есть:@+id
используется для создания идентификатора для представления вR.java
файле.@id
используется для ссылки на идентификатор, созданный для представления в файле R.java.Мы используем
@+id
сandroid:id=""
, но что, если идентификатор не создан, и мы передаем его перед созданием (прямая ссылка).В этом случае мы используем
@+id
для создания идентификатора и при определении представления мы должны ссылаться на него.Пожалуйста, обратитесь ниже код:
В приведенном выше коде идентификатор для Spinner
@+id/spinner
создается в другом представлении, и при определении счетчика мы ссылаемся на идентификатор, созданный выше.Таким образом, мы должны создать идентификатор, если мы используем представление до того, как представление было создано.
источник
Разница между
“@+id/”
и“@id/”
в AndroidПервый используется для создания
ID
конкретного компонента пользовательского интерфейса, а другой - для ссылки на конкретный компонент.источник
Если элемент представления выполняет ту же операцию, вы можете использовать
@+id
для каждой записи в любом макете , потому что во время компиляции несколько файл создает только одно перечисления. Так, например, если у меня есть кнопка сохранения на каждой странице, которая выполняет одну и ту же операцию, я использую ее в каждом макете. Файл R.java содержит только одну запись для button_save.@+id/foo
R.java
android:id="@+id/button_save"
источник