web-dev-qa-db-fra.com

Différence entre "@ id /" et "@ + id /" dans Android

Quelle est la différence entre _@id/_ et _@+id/_?

Dans @+id/, le symbole plus _+_ indique de créer un nouveau nom de ressource et de l'ajouter au fichier _R.Java_. mais qu'en est-il de @id/? Dans la documentation de ID : lorsque vous référencez une ressource Android ID, vous n'avez pas besoin du symbole plus, mais vous devez ajouter l'espace de nom du paquet Android, comme suit:

_Android:id="@Android:id/list"
_

Mais dans l'image ci-dessous, Eclipse ne suggère aucun type de _@Android:id/_.

Image showing the suggestion for the @/id and @+/id

Est-ce que _@id/_ et _@Android:id/_ sont les mêmes?

437
Vikas Patidar

vous vous référez à Android resources, qui sont déjà définis dans Android système, avec @Android:id/.. alors que pour accéder aux ressources que vous avez définies/créées dans votre projet, vous utilisez @id/..

Plus d'infos

Selon vos clarifications dans le chat, vous avez dit que vous avez un problème comme celui-ci:

Si nous utilisons Android:id="@id/layout_item_id" cela ne fonctionne pas. @+id/ fonctionne plutôt, alors quelle est la différence ici? Et c'était ma question initiale.

Cela dépend du contexte. Lorsque vous utilisez l'attribut XML de Android:id, vous spécifiez un nouvel ID et vous indiquez à l'analyseur syntaxique (ou à l'appelez le générateur) de créer une nouvelle entrée dans R.Java, vous devez donc inclure un signe +.

Tandis que dans l'autre cas, comme Android:layout_below="@id/myTextView", vous faites référence à un identifiant qui a déjà été créé. Par conséquent, l'analyseur le lie à l'identifiant déjà créé dans R.Java.

Plus d'infos encore

Comme vous l'avez dit dans votre conversation, notez que Android:layout_below="@id/myTextView" ne reconnaîtra pas un élément portant l'id myTextView s'il est écrit après l'élément que vous utilisez.

343
Aman Alam

le signe + est un raccourci pour ajouter l'identifiant à votre liste d'identifiants de ressources. Sinon, vous devez les avoir dans un fichier XML comme celui-ci.

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

Parfois, vous voyez des références dans vos fichiers de mise en page comme:

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

et

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

Quelle est la différence?

.. je suis content que vous avez demandé

@+id/foo signifie que vous créez un identifiant nommé foo dans l'espace de noms de votre application. Vous pouvez vous y référer en utilisant @id/foo. @Android:id/foo signifie que vous faites référence à un identifiant défini dans l'espace de noms Android.

Le '+' signifie créer le symbole s'il n'existe pas déjà. Vous n'en avez pas besoin (et vous ne devez pas l'utiliser) lorsque vous faites référence à Android: symboles, car ceux-ci sont déjà définis pour vous par la plate-forme et vous ne pouvez pas créer votre propre espace de nom de toute façon.

Cet espace de noms est l'espace de noms du framework. Par exemple, vous devez utiliser @Android:id/list car il s'agit de l'identifiant que le framework s'attend à trouver .. (le framework ne connaît que les identifiants de l'espace de noms Android.)

Complètement copié de ceci source

44
Tanmay Mandal

En bref

Android:id="@+id/my_button"

Le signe + id Plus indique à Android d'ajouter ou de créer un nouvel identifiant dans Ressources.

tandis que

Android:layout_below="@id/my_button"

il suffit de se référer à l'identifiant déjà généré ..

37
Xar E Ahmer

Le signe plus (+) précédant le type de ressource est nécessaire uniquement lorsque vous définissez un ID de ressource pour la première fois. Lorsque vous compilez l'application, les outils du SDK utilisent le nom d'ID pour créer un nouvel ID de ressource dans le fichier R.Java de votre projet, qui fait référence à l'élément EditText. Avec l'ID de ressource déclaré une fois de cette façon, les autres références à l'ID n'ont pas besoin du signe plus. L'utilisation du signe plus est nécessaire uniquement lors de la spécification d'un nouvel ID de ressource et n'est pas nécessaire pour des ressources concrètes telles que des chaînes ou des présentations. Voir la boîte latérale pour plus d'informations sur les objets de ressources.

De: https://developer.Android.com/training/basics/firstapp/building-ui.html

9
Nguyen

C'est très simple:

"@ + ..." - créer un nouveau

"@ ..." - lien sur existant

Source: https://developer.Android.com/guide/topics/resources/layout-resource.html#idvalue

7
Fortran

À partir du Guide du développeur :

Android:id="@+id/my_button"

Le symbole at (@) au début de la chaîne indique que l'analyseur XML doit analyser et développer le reste de la chaîne d'ID et l'identifier en tant que ressource ID. Le symbole plus (+) signifie qu'il s'agit d'un nouveau nom de ressource qui doit être créé et ajouté à nos ressources (dans le fichier R.Java). Un certain nombre d'autres ressources d'ID proposées par le cadre Android. Lorsque vous référencez un ID de ressource Android, vous n'avez pas besoin du symbole plus, mais vous devez ajouter l'espace de nom du paquet Android, comme suit:

Android:id="@Android:id/empty"

6
Jeff Axelrod

Il y a un bogue avec Eclipse: parfois, si vous venez de créer un nouveau @+id/.., il ne sera pas ajouté immédiatement au fichier R.Java, même après la création du projet. La solution consiste à redémarrer Eclipse.

Je pense que cela devrait être résolu le plus tôt possible, car cela peut (et par expérience, amener certains développeurs à croire qu’il ya un problème avec leur syntaxe, et essayer de le déboguer même s’il n’ya vraiment rien à déboguer.

4
josephus

@id/ et @Android:id/ n'est pas la même chose.

@id/ identifiant de référence dans votre application, @Android:id/ référençant un élément de la plate-forme Android.

Eclipse a tort.

4
Olegas

Android utilise des fichiers appelés ressources où les valeurs sont stockées pour les fichiers XML.

Maintenant, lorsque vous utilisez @ id/pour un objet XML, vous essayez de vous référer à un identifiant déjà enregistré dans les fichiers de valeurs. D'autre part, lorsque vous utilisez @ + id /, il enregistre un nouvel identifiant dans les fichiers de valeurs, comme l'indique le symbole '+'.

J'espère que cela t'aides :).

4
Tanuj Nayak

Si l'élément de vue effectue la même opération, vous pouvez utiliser l'ID @ + pour chaque entrée de n'importe quelle présentation, car lors de la compilation de plusieurs @ + id/foo, le fichier R.Java ne crée qu'une énumération. Ainsi, par exemple, si j'ai un bouton de sauvegarde sur chaque page qui effectue la même opération, j'utilise Android: id = "@ + id/button_save" dans chaque mise en page. Le fichier R.Java ne contient qu'une seule entrée pour button_save.

1
TheChrisONeil

La différence entre @+id et @id est:

  • @+id est utilisé pour créer un identifiant pour une vue dans le fichier R.Java.
  • @id est utilisé pour faire référence à l'identifiant créé pour la vue dans le fichier R.Java.

Nous utilisons @+id avec Android:id="", mais que se passe-t-il si l'identifiant n'est pas créé et que nous le référons avant d'être créé (renvoi direct).

Dans ce cas, nous avons utilisé @+id pour créer un identifiant et lors de la définition de la vue, nous devons le référencer.

Veuillez vous référer au code ci-dessous:

<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/dates"
     Android:layout_alignParentRight="true" />

</RelativeLayout>

Dans le code ci-dessus, l'id pour Spinner @+id/spinner est créé dans une autre vue et lors de la définition du spinner, nous faisons référence à l'ID créé ci-dessus.

Donc, nous devons créer l'ID si nous utilisons la vue avant qu'elle ne soit créée.

1
Kunal Sale

Différence entre “@+id/” et “@id/” dans Android

Le premier est utilisé pour créer la ID du composant ui particulier et l’autre est utilisé pour désigner le composant particulier

1
Gurpreet Singh