Wofür wird ids.xml verwendet?

Lesezeit: 4 Minuten

Benutzer-Avatar
Sam

Nur eine kurze Frage, wofür wird die ids.xml bei der Entwicklung einer Android-App verwendet? Ich habe auf der Android-Ressourcen-Webseite ein Beispiel gesehen, das Folgendes enthielt:

<resources>
  <item name="snack" type="id"/>
</resources>

Wofür würde dies verwendet werden?

Benutzer-Avatar
Yashwanth Kumar

id.xml wird im Allgemeinen verwendet, um die IDs zu deklarieren, die Sie für die Ansichten in den Layouts verwenden.

du könntest so etwas verwenden

<TextView android:id="@id/snack">

für Ihre gegebene xml.

  • Gibt es einen Vorteil, wenn Sie es in “ids.xml” definieren, anstatt nur … android:id=”@+id/snack” zu tun?

    – pyko

    24. Dezember 2011 um 6:42 Uhr

  • Soll ich also android:id=”@+id/newID” verwenden oder newID in der Datei ids.xml deklarieren? Was ist die beste Lösung?

    – Nguyen Minh Binh

    23. Juni 2012 um 6:18 Uhr


  • Sie können es auch für Tags verwenden view.setTag(id, value) um dieses Tag später aus Ihrer Ansicht zu lesen …

    – Funke

    22. Oktober 2013 um 19:59 Uhr

  • @pyko Sie können es für Sonderfälle wie das Testen auf das Vorhandensein einer bestimmten optionalen Ansicht (die möglicherweise nie definiert wird) verwenden, z. B. so etwas wie android.R.empty.

    – stn

    7. Oktober 2014 um 6:22 Uhr

  • Ein weiterer Anwendungsfall, den ich gefunden habe, ist das dynamische Hinzufügen von Menüelementen aus Code, bei dem Sie ihm eine ID zuweisen möchten, das Menüelement jedoch nicht in einer Menü-XML-Datei definiert ist, sodass Sie “@+id/foo “. Sie definieren also die ID in der Datei ids.xml und verweisen dann im Code auf R.id.foo.

    – Paulus

    23. Februar 2016 um 16:19 Uhr

ids.xml hat folgenden Vorteil: Alle IDs wurden deklariert, damit der Compiler sie erkennen kann. Wenn so etwas:

<TextView
    android:id="@+id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignBelow="@id/text2"
    android:text="...."/>
<TextView
    android:id="@+id/text2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="...."/>

Kann zu einem Kompilierungsfehler führen, da auf text2 verwiesen wurde, bevor es deklariert wurde

  • Du hast Recht, ich habe genau dieses Problem. Ich weiß, es ist ein alter Beitrag. In meiner Situation muss ich die Schaltfläche „Speichern“ oben in der XML-Datei platzieren, aber sie wird in der Schaltfläche auf dem Bildschirm angezeigt, auf dem ich möchte, dass eine andere Ansicht ÜBER „saveButton“ steht. Ich habe versucht, die Schaltfläche Speichern zu lassen, um UNTER dieser Ansicht zu sagen, aber das hat bei mir nicht funktioniert.

    – malhobayyeb

    31. März 2013 um 7:42 Uhr

  • Obwohl es stimmt, hilft es nicht wirklich viel. In diesem Beispiel – hätten Sie setzen können android:layout_alignBelow="@+id/text2" und im zweiten TextView, android:id="@id/text2".

    – ataulm

    21. Mai 2013 um 11:31 Uhr

  • Das ist eine gültige Problemumgehung, aber das Deklarieren einer ID in einer anderen Ansicht als der angegebenen ist möglicherweise nicht die beste stilistische Wahl. Damit die Sprache Ihre Absicht richtig widerspiegelt, sollte die ID in der Ansicht deklariert werden, die sie verwendet.

    – Tod Bauer

    15. November 2013 um 16:12 Uhr

  • Das Beispiel wird nicht funktionieren. Du brauchst ein RelativeLayout und dann verwenden android:layout_belowseit android:layout_alignBelow="@id/text2" ist ungültig. Selbst dann wird dies problemlos ohne eine kompiliert ids.xmlwas die Erklärung etwas verwirrend macht.

    – hamena314

    1. Juli 2018 um 9:28 Uhr


Beim dynamischen Erstellen von Ansichten ist das Vordefinieren von IDs in ids.xml gibt die Möglichkeit, eine neu erstellte Ansicht zu referenzieren. Nachdem Sie die verwendet haben setId(id) -Methode können Sie auf die Ansicht zugreifen, als wäre sie in XML definiert worden. Dies Blogeintrag hat ein schönes Beispiel.

Eine weitere Anwendung für id.xml betrifft Layouts und Bibliotheksprojekte. Angenommen, Sie geben eine generische Liste von Optionen in einem Bibliotheks-(Dialog-)Layout an

<CheckedTextView android:id="@+id/checked_option_one"...
<CheckedTextView android:id="@+id/checked_option_two"...
...

und behandeln Sie diese Ansichten in einem generischen (Dialog-)Fragment

optionOneCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_one);
optionTwoCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_two);

Wenn Sie eine der Ansichtsdeklarationen aus einer Kopie des Layouts in einem Hauptprojekt entfernen, erhalten Sie zur Laufzeit eine Fehlerausnahme “Kein solches Feld”.

Der Compiler beschwert sich nicht, aber zur Laufzeit ist die ID nicht wirklich vorhanden/bekannt.

Deklarieren der IDs in id.xml und Verwenden

<CheckedTextView android:id="@id/checked_option_one"...
...

vermeidet den Laufzeitfehler

ids.xml ist viel mächtiger. Du kannst vordefinieren Werte wie

<item name="fragment_my_feature" type="layout"/>
<item name="my_project_red" type="color"/>

nicht nur id. Tatsächlich können Sie mehr Ressourcentypen verwenden: https://developer.android.com/guide/topics/resources/more-resources

Es ist äußerst hilfreich, um einige Layouts, Farben usw. in vorzudefinieren Root-Modul für Multi-Modul-App. Sie können aktuelle Layouts, Farben usw. spezifisch beibehalten App-Modul was hat Root-Modul als Abhängigkeit.

1145560cookie-checkWofür wird ids.xml verwendet?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy