Was ist der Unterschied zwischen
@id/
und@+id/
?
Im @+id/
Pluszeichen wird +
angewiesen, einen neuen Ressourcennamen zu erstellen und der R.java
Datei hinzuzufügen, aber wie sieht es aus @id/
? Aus der Dokumentation von ID
: Wenn Sie auf eine Android-Ressource verweisen ID
, benötigen Sie nicht das Pluszeichen, sondern müssen den Namespace des Android-Pakets wie folgt hinzufügen:
android:id="@android:id/list"
Aber im Bild unten schlägt Eclipse keinerlei Vorschläge vor @android:id/
.
Sind
@id/
und@android:id/
das gleiche?
android
android-xml
Vikas Patidar
quelle
quelle
Antworten:
Sie verweisen auf
Android resources
, die bereits im Android-System definiert sind,@android:id/..
während Sie auf Ressourcen zugreifen, die Sie in Ihrem Projekt definiert / erstellt haben@id/..
Mehr Info
Gemäß Ihren Erläuterungen im Chat haben Sie gesagt, dass Sie ein Problem wie das folgende haben:
Nun, es hängt vom Kontext ab , wenn Sie das XML - Attribut verwenden
android:id
, dann sind Sie eine neue ID spezifiziert, und Anweisen der Parser (oder der Erbauer nennen) einen neuen Eintrag in erstellenR.java
, damit Sie müssen ein+
Zeichen einschließen .Während Sie sich im anderen Fall
android:layout_below="@id/myTextView"
auf eine bereits erstellte ID beziehen, verknüpft der Parser diese mit der bereits erstellten ID inR.java
.Nochmals mehr Infos
Beachten Sie, wie Sie in Ihrem Chat gesagt haben, dass
android:layout_below="@id/myTextView"
ein Element mit ID nicht erkannt wird,myTextView
wenn es nach dem Element geschrieben wird, in dem Sie es verwenden.quelle
android:layout_below="@+id/myTextView"
definieren und dann das Element selbst mit definierenandroid:id="@id/myTextView"
.+
inlayout_below
sowie zu setzenandroid:id
ist wirklich in Ordnung, da,The '+' means to create the symbol if it doesn't already exist
wie Tanmay Mandal in seiner netten (aber unterschätzten) Antwort erwähnte. Aus diesem Grund gibt es auch keinen negativen Laufzeiteffekt (möglicherweise eine unermesslich geringe Verlängerung der Kompilierungszeit ^^).Das + -Zeichen ist eine Abkürzung, um die ID zu Ihrer Liste der Ressourcen-IDs hinzuzufügen. Andernfalls müssen Sie sie in einer XML-Datei wie dieser haben
quelle
<View android:id="@id/my_logo"/>
Wenn Sie die oben definierte Ressourcendatei nicht hätten, müssten Sie dies wie<View android:id="@+id/my_logo"/>
folgt tun : Sie müssen die + id nur einmal ausführen Wenn Sie also in einer anderen Layoutdatei <View android: id = "+ id / my_logo" /> verwendet haben, müssen Sie das Zeichen '+' nicht einfügen, wenn Sie das nächste Mal dieselbe ID in einem Layout verwenden.res/drawable/
oderres/layout/
oderres/values/
und wie heißt diese Datei? Wenn Sie einen nützlichen Link dazu haben, posten Sie bitte hier.Manchmal sehen Sie Referenzen in Ihren Layoutdateien wie:
<listview id="@+id/android:list">
und
<listview id="@android:id/list">
Was ist der Unterschied?
Ich bin froh, dass du gefragt hast ☺
@+id/foo
bedeutet, dass Sie im Namespace Ihrer Anwendung eine ID mit dem Namen foo erstellen. Sie können mit darauf verweisen@id/foo
.@android:id/foo
bedeutet, dass Sie sich auf eine ID beziehen, die im Android-Namespace definiert ist.Das '+' bedeutet, das Symbol zu erstellen, falls es noch nicht vorhanden ist. Sie benötigen es nicht (und sollten es auch nicht verwenden), wenn Sie auf Android: -Symbole verweisen, da diese bereits von der Plattform für Sie definiert wurden und Sie in diesem Namespace ohnehin keine eigenen erstellen können.
Dieser Namespace ist der Namespace des Frameworks. Sie müssen beispielsweise
@android:id/list
die ID verwenden, die das Framework voraussichtlich finden wird. (Das Framework kennt nur die IDs im Android-Namespace.)Vollständig aus dieser Quelle kopiert
quelle
Zusamenfassend
während
quelle
Von: https://developer.android.com/training/basics/firstapp/building-ui.html
quelle
Es ist sehr einfach:
"@ + ..." - neu erstellen
"@ ..." - Link auf vorhanden
Quelle: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
quelle
Aus dem Entwicklerhandbuch :
Das at-Symbol (
@
) am Anfang der Zeichenfolge gibt an, dass der XML-Parser den Rest der ID-Zeichenfolge analysieren, erweitern und als ID-Ressource identifizieren soll. Das Pluszeichen (+
) bedeutet, dass dies ein neuer Ressourcenname ist, der erstellt und unseren Ressourcen hinzugefügt werden muss (in derR.java
Datei). Es gibt eine Reihe anderer ID-Ressourcen, die vom Android-Framework angeboten werden. Wenn Sie auf eine Android-Ressourcen-ID verweisen, benötigen Sie kein Pluszeichen, sondern müssen denandroid
Paketnamespace wie folgt hinzufügen :android:id="@android:id/empty"
quelle
Es gibt einen Fehler bei Eclipse, bei dem manchmal, wenn Sie gerade eine neue erstellt haben
@+id/..
, diese nicht sofort zur R.java-Datei hinzugefügt wird, selbst nachdem das Projekt neu erstellt wurde. Die Lösung besteht darin, Eclipse neu zu starten.Ich denke, dies sollte so schnell wie möglich gelöst werden, da es einige Entwickler (und aus Erfahrung) verwirren kann, zu denken, dass etwas mit ihrer Syntax nicht stimmt, und versuchen, es zu debuggen, selbst wenn es wirklich nichts zu debuggen gibt.
quelle
Android verwendet einige Dateien, die als Ressourcen bezeichnet werden und in denen Werte für die XML-Dateien gespeichert sind.
Wenn Sie jetzt @ id / für ein XML-Objekt verwenden, wird versucht, auf eine ID zu verweisen, die bereits in den Wertedateien registriert ist. Wenn Sie dagegen @ + id / verwenden, wird eine neue ID in den Wertedateien registriert, wie dies durch das Symbol '+' impliziert wird.
Hoffe das hilft :).
quelle
@id/
und@android:id/
ist nicht dasselbe.@id/
Referenzieren der ID in Ihrer Anwendung,@android:id/
Verweisen auf ein Element in der Android-Plattform.Eclipse ist falsch.
quelle
@id/ referencing ID in your application
Aber Eclise gibt,Error: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
wenn wir es verwenden, um die Anwendungsressource zu verweisen. Was ist der Unterschied zwischen@id/
und@+id/
? Wie könnte man sagen, dass Eclipse falsch ist?@id/
nur im Fall vonRelativeLayout
Unterschied zwischen
@+id
und@id
ist:@+id
wird verwendet, um eine ID für eine Ansicht in einerR.java
Datei zu erstellen .@id
wird verwendet, um auf die ID zu verweisen, die für die Ansicht in der R.java-Datei erstellt wurde.Wir verwenden
@+id
mitandroid:id=""
, aber was ist, wenn die ID nicht erstellt wird und wir sie vor dem Erstellen verweisen (Forward Referencing).In diesem Fall müssen wir
@+id
eine ID erstellen und beim Definieren der Ansicht darauf verweisen.Bitte beachten Sie den folgenden Code:
Im obigen Code wird die ID für Spinner
@+id/spinner
in einer anderen Ansicht erstellt, und während wir den Spinner definieren, verweisen wir auf die oben erstellte ID.Wir müssen also die ID erstellen, wenn wir die Ansicht verwenden, bevor die Ansicht erstellt wurde.
quelle
Unterschied zwischen
“@+id/”
und“@id/”
in AndroidDie erste wird verwendet, um die
ID
bestimmte UI-Komponente zu erstellen, und die andere wird verwendet, um die bestimmte Komponente zu referenzierenquelle
Wenn das Ansichtselement dieselbe Operation ausführt, können Sie die
@+id
für jeden Eintrag in einem beliebigen Layout verwenden, da@+id/foo
dieR.java
Datei beim Kompilieren mehrerer Elemente nur eine Aufzählung erstellt. Wenn ich zum Beispiel auf jeder Seite eine Schaltfläche zum Speichern habe, die denselben Vorgang ausführt, verwende ich sieandroid:id="@+id/button_save"
in jedem Layout. Die R.java-Datei enthält nur einen Eintrag für button_save.quelle