Подтвердить что ты не робот

В чем разница между @id и @+ id?

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

4b9b3361

Ответ 1

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

Точно из документов:

Символ at (@) в начале строки указывает, что Парсер XML должен анализировать и расширять остальную строку идентификатора и идентифицируйте его как ресурс идентификатора. Символ плюса (+) означает, что это новое имя ресурса, которое необходимо создать и добавить в наши ресурсы (в файле R.java). Существует ряд других идентификационных ресурсов, которые предлагаются платформой 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, start и check. Затем в приложении вы можете подключиться к ним с помощью findViewById(R.id.start).

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

Ответ 2

Иногда вам приходится использовать знак+. Например. когда вы используете <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').

Мне это удалось в проекте с библиотеками.

Ответ 3

Android: ID = "@+ идентификатор /my _button"

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

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

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

Ответ 4

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

android:id="@+id/toolbar

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

android:layout_below="@id/toolbar"