Разница между "@id/ " и "@ + id/ " в Android
что diffirence между
@id/
и@+id/
?
на @+id/
символ плюс + указывает создать новое имя ресурса и добавить в R.java
файл, но как насчет @id/
? Из документации ID
: при ссылке на идентификатор ресурса Android вам не нужен символ плюс, но необходимо добавить пространство имен пакета android, например:
android:id="@android:id/list"
но в изображение ниже Eclipse не предлагает никаких @android: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, созданный выше.
Итак, мы должны создать идентификатор, если мы используем представление до того, как представление было создано.