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

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

Dans @+id/ le symbole + indique de créer une nouvelle ressource, le nom et l'ajouter à la R.java fichier mais qu' @id/ ? De la documentation de ID : lorsque vous référencez un ID de ressource Android, vous n'avez pas besoin du symbole plus, mais devez ajouter l'espace de noms du paquet android, comme ceci:

android:id="@android:id/list"

mais dans L'Image ci-dessous éclipse ne suggère aucune sorte de @android:id/ .

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

est-ce que @id/ et @android:id/ sont identiques?

408
demandé sur Max 2011-02-17 09:52:31

13 réponses

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

Plus D'Informations

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

si on utilise android:id="@id/layout_item_id" ça ne marche pas. Au lieu de @+id/ fonctionne ainsi quelle est la différence ici? Et c'était ma question initiale.

Eh bien, cela dépend du contexte , lorsque vous utilisez L'attribut XML de android:id , alors vous spécifiez un nouvel id , et vous demandez à l'analyseur (ou l'appelez le constructeur) de créer une nouvelle entrée dans R.java , donc vous devez inclure un signe + .

alors que dans l'autre cas, comme android:layout_below="@id/myTextView" , vous faites référence à une pièce d'identité qui a déjà été créé, donc l'analyseur le lie à l'id déjà créé dans R.java .

Plus D'Infos Nouveau

comme vous l'avez dit dans votre chat, notez que android:layout_below="@id/myTextView" ne reconnaîtra pas un élément avec id myTextView s'il est écrit après l'élément dans lequel vous l'utilisez.

325
répondu Aman Alam 2013-09-09 21:16:18

le signe + est un raccourci pour ajouter l'id à votre liste d'ID 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
répondu schwiz 2011-02-17 09:54:35

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 différence?

.. Je suis content que vous ayez demandé

@+id/foo signifie que vous créez un id 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 id défini dans le namespace androïde.

Le '+' signifie pour créer le symbole s'il n'existe pas déjà. Vous n'en avez pas besoin (et ne devriez pas l'utiliser) lorsque vous référencez des symboles android:, parce que ceux-ci sont déjà définis pour vous par la plate-forme et vous ne pouvez pas faire votre propre dans cet espace de nom de toute façon.

Cet espace est l'espace de noms du cadre. par exemple, vous devez utiliser @android:id/list parce que cette l'id le cadre s'attend à trouver.. (le cadre d'sait seulement à propos des identifiants dans l'Espace-nom androïde.)

entièrement copié de cette source

41
répondu Tanmay Mandal 2011-02-17 07:02:05

En Abrégé

android:id="@+id/my_button"
Le signe

+id Plus indique à android d'ajouter ou de créer un nouvel id dans les ressources.

alors que

android:layout_below="@id/my_button"

il suffit d'aider à renvoyer l'id déjà généré..

36
répondu Xar E Ahmer 2017-06-10 13:27:50

le signe plus ( + ) avant le type de ressource n'est nécessaire que lorsque vous définissez un ID de ressource pour la première fois. Lorsque vous compilez l'application, les outils SDK utilisent le nom D'ID pour créer un nouvel ID de ressource dans le fichier R.java de votre projet qui se réfère à 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 n'est nécessaire que lorsque l'on spécifie un nouvel ID de ressource et non nécessaires pour des ressources concrètes telles que des cordes ou des mises en page. Voir la latérale pour plus d'informations sur les objets de ressource.

de: https://developer.android.com/training/basics/firstapp/building-ui.html

9
répondu Nguyen 2016-10-25 07:14:37

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
répondu Fortran 2018-01-12 12:44:06

De la 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 étendre le reste de la chaîne ID et l'identifier comme une 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 ). Il existe un certain nombre d'autres ressources D'identification qui sont offertes par le Cadre Android. Lorsque vous référencez un identifiant de ressource Android, vous n'avez pas besoin du symbole plus, mais vous devez ajouter le namespace du paquet android , comme ceci:

android:id="@android:id/empty"

6
répondu Jeff Axelrod 2012-08-30 15:46:08

il y a un bug avec Eclipse où parfois si vous venez de créer un nouveau @+id/.. , il ne sera pas ajouté immédiatement à la R.java dossier, même après la construction propre du projet. La solution est de redémarrer Eclipse.

je pense que cela devrait être résolu dès que possible, parce qu'il peut (et d'expérience, va) confondre certains développeurs en pensant qu'Il ya quelque chose de mal avec leur syntaxe, et essayer de le déboguer, même si il n'y a vraiment rien à déboguer.

5
répondu josephus 2012-04-30 07:47:58

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

@id/ référencement ID de votre application, @android:id/ référencement d'un élément dans la plate-forme Android.

Eclipse est fausse.

4
répondu Olegas 2011-02-17 07:01:52

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

Maintenant, lorsque vous utilisez @id / pour un objet XML, il essaie de se référer à un id qui est déjà enregistré dans les fichiers de valeurs. D'un autre côté, lorsque vous utilisez @+id/ il enregistre un nouvel id dans les fichiers de valeurs comme le suggère le symbole'+'.

Espérons que cela aide :).

4
répondu Tanuj Nayak 2012-09-08 11:14:56

si l'élément de vue effectue la même opération, vous pouvez utiliser le @+id pour chaque entrée dans n'importe quel layout parce que lors de la compilation de multiples @+id/foo R.java file ne crée qu'une seule énumération. Donc par exemple si j'ai un bouton "enregistrer" sur chaque page qui effectue la même opération, j'utilise android:id="@+id/button_save" dans chaque modèle. Les R.java le fichier n'a qu'une entrée pour le fichier button_save.

1
répondu TheChrisONeil 2014-05-31 14:19:12

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

Le premier est utilisé pour créer l'id de l'interface utilisateur et l'autre est utilisé pour renvoyer le composant particulier

1
répondu Gurpreet Singh 2017-09-01 14:29:50

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

@+id est utilisé pour créer un id pour une vue dans R.java file.

@id est utilisé pour renvoyer l'id créé pour la vue dans R.java file.

Nous utilisons @+id avec android:id="", mais que si l'id n'est pas créé et nous la renvoyer avant d'arriver créé(à terme de Référencement).

dans ce cas, nous avons utilisé @+id pour créer id et tout en définissant la vue nous devons de la lui renvoyer.

prière de se 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/name"
     android:layout_alignParentRight="true" />

</RelativeLayout>

dans le code ci-dessus,id pour Spinner @+id/spinner est créé dans une autre vue et tout en définissant le spinner nous référons à l'id créé ci-dessus.

ainsi, nous devons créer l'id si nous utilisons la vue avant que la vue ait été créée.

0
répondu Kunal Sale 2018-01-15 17:46:08