2012-06-22 4 views
19

Я только что начал использовать андроид, и у нас осталось около 5 макетов. Тем не менее, я просто понял, что я использую @id и @ + id взаимозаменяемо, но я не уверен, что такое точная разница между ними.В чем разница между @id и @ + id?

ответ

37

Вам необходимо использовать @+id, когда вы определяете свой собственный идентификатор для представления.

Именно из документы:

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

А теперь я добавить для вас практического примера:

<Button 
    android:id="@+id/start" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/> 

<Button 
    android:id="@+id/check" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/start" 
/> 

Так вот, вы создали два IDs, запуск и проверку. Затем в вашем приложении вы можете подключиться к ним с помощью findViewById(R.id.start).

И это android:layout_below="@id/start" относятся к существующим id.start и означает, что ваш Button с идентификатором проверки будет позиционироваться ниже Button с идентификатором начать.

+0

Хорошо, спасибо, это означает, что я могу использовать @ + id, когда захочу, без проблем? – JuiCe

+0

Да, если вы хотите создать новый уникальный идентификатор, просто используйте @ + id, как это понимается в документах. – Sajmon

+1

@Sajmon создаст проблему, когда я использую android: layout_below = "@ + id/start" вместо android: layout_below = "@ id/start". Или это может создать проблему после долгого времени? – Bora

0

андроид: идентификатор = "@ + идентификатор/my_button"

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

андроид: layout_below = "@ идентификатор/my_button"

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

1

Иногда вы должны использовать знак +. Например. при использовании <include ... /> и включаемый файл выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.FloatingActionButton xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    (...) 
    app:layout_anchor="@+id/view_pager" 
    app:layout_anchorGravity="top|right|end" 
/> 

Если вы не добавляете + в "@+id/view_pager" вы получите ошибку при построении проекта:

Error:(9, 24) No resource found that matches the given name (at 'layout_anchor' with value '@id/view_pager'). 

Это случилось со мной мне в проекте с библиотеками.

0

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

android:id=”@+id/toolbar 

Следующая идентификатор Теперь можно отслеживать findViewById (...), который смотрит на него в разрешении файла для идентификатора, или просто каталог R.id и возвращает тип рассматриваемого вопроса. Другой, @id, ведет себя так же, как findViewById (...) - ищет компонент по предоставленному идентификатору, но зарезервирован только для макетов. Наиболее общим его использованием является размещение компонента относительно возвращаемого компонента.

android:layout_below=”@id/toolbar” 
Смежные вопросы