Warum muss diese Zeile xmlns: android = "http://schemas.android.com/apk/res/android" die erste in der Layout-XML-Datei sein?

156

Warum wird diese Zeile in der XML-Layoutdatei benötigt?

xmlns:android="http://schemas.android.com/apk/res/android" 
Hitesh Dhamshaniya
quelle
Es muss nicht in der ersten Zeile stehen?
Aada

Antworten:

118

In XML deklariert xmlns einen Namespace. In der Tat, wenn Sie tun:

<LinearLayout android:id>
</LinearLayout>

Anstatt aufzurufen android:id, verwendet die XML-Datei http://schemas.android.com/apk/res/android:id , um eindeutig zu sein. Im Allgemeinen existiert diese Seite nicht (es ist eine URI, keine URL), aber manchmal ist es eine URL, die den verwendeten Namespace erklärt.

Der Namespace hat fast die gleichen Verwendungszwecke wie der Paketname in einer Java-Anwendung.

Hier ist eine Erklärung.

Uniform Resource Identifier (URI)

Ein Uniform Resource Identifier (URI) ist eine Zeichenfolge, die eine Internetressource identifiziert.

Die häufigste URI ist die URL (Uniform Resource Locator), die eine Internetdomänenadresse identifiziert. Ein anderer, nicht so häufiger URI-Typ ist der Universal Resource Name (URN).

In unseren Beispielen werden nur URLs verwendet.

NitroG42
quelle
13
Warum haben wir dann android:layout_widthstatt nur layout_width?
Shashwat
4
Wie kommt es dann, dass wir "LinearLayout" anstelle von "android: LinearLayout" verwenden?
Android-Entwickler
Wahrscheinlich, weil LinearLayout Teil des Root-Namespace ist und android: xxx-Attribute Teil eines Subnamespace sind (" schemas.android.com/apk/res/android/android/id" )
NitroG42
4
Natürlich ruft es diese URL nicht ab, es ist eine URI: w3schools.com/xml/xml_namespaces.asp
NitroG42
1
Von danielmiessler.com/study/url_vs_uri : "Eine URL ist eine Art von URI. Wenn Ihnen also jemand sagt, dass eine URL keine URI ist, liegt er falsch. Das bedeutet jedoch nicht, dass alle URIs URLs sind. Alle Schmetterlinge fliegen, aber Nicht alles, was fliegt, ist ein Schmetterling. Der Teil, der eine URI zu einer URL macht, ist die Aufnahme des "Zugriffsmechanismus" oder "Netzwerkstandorts", z. B. http: /, ftp: //, ldap: //, telnet: / /, etc.
yonivav
37

Um zu verstehen, warum xmlns:android=“http://schemas.android.com/apk/res/android”dies der erste in der Layout-XML-Datei sein muss, werden wir die Komponenten anhand eines Beispiels verstehen

Sample:: ::

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/container" >    
</FrameLayout>

Uniform Resource Indicator (URI) :

  • Beim Rechnen ist ein URI (Uniform Resource Identifier) ​​eine Zeichenfolge, mit der ein Name einer Ressource identifiziert wird.
  • Eine solche Identifizierung ermöglicht die Interaktion mit Darstellungen der Ressource über ein Netzwerk, typischerweise das World Wide Web, unter Verwendung spezifischer Protokolle.

Beispiel: http://schemas.android.com/apk/res/android:idist die URI hier


XML-Namespace :

  • XML-Namespaces werden verwendet, um eindeutig benannte Elemente und Attribute in einem XML-Dokument bereitzustellen. xmlns:androidbeschreibt den Android-Namespace.
  • Es wird so verwendet, weil dies eine Design-Wahl von Google ist, um die Fehler beim Kompilieren zu behandeln.
  • Angenommen, wir schreiben ein eigenes textviewWidget mit anderen Funktionen als Android textview. Der Android-Namespace hilft bei der Unterscheidung zwischen unserem benutzerdefinierten textviewWidget und dem Android- textviewWidget
Devrath
quelle
8
Diese Antwort ist wirklich lesenswert im Vergleich zu den obigen, die "WARUM?"
eRaisedToX
Sie sagten: "Eine solche Identifizierung ermöglicht die Interaktion mit Darstellungen der Ressource über ein Netzwerk, normalerweise das World Wide Web, unter Verwendung bestimmter Protokolle. Beispiel: schemas.android.com/apk/res/android:id ist hier die URI." Aber wenn ich keine Internetverbindung habe, wie interagiert dieser Android-Namensraum mit Ressourcen über ein Netzwerk?
Kavie
29

xmlns bezieht sich auf den XML-Namespace

Bei der Verwendung von Präfixen in XML muss ein sogenannter Namespace für das Präfix definiert werden. Der Namespace wird durch das Attribut xmlns im Start-Tag eines Elements definiert. Die Namespace-Deklaration hat die folgende Syntax. xmlns: prefix = "URI".

Hinweis : Der Namespace-URI wird vom Parser nicht zum Nachschlagen von Informationen verwendet.

Der Zweck besteht darin, dem Namespace einen eindeutigen Namen zu geben. Häufig verwenden Unternehmen den Namespace jedoch als Zeiger auf eine Webseite mit Namespace-Informationen.

Martyn
quelle
7

Dies ist nur die XML-Namensraumdeklaration. Wir verwenden diesen Namensraum, um anzugeben, dass die unten aufgeführten Attribute zu Android gehören. Sie beginnen also mit " android: "

Sie können tatsächlich Ihre eigenen benutzerdefinierten Attribute erstellen. Um die Namenskonflikte zu vermeiden, bei denen zwei Attribute gleich benannt sind, sich jedoch unterschiedlich verhalten, fügen wir das Präfix " android: " hinzu, um anzuzeigen, dass es sich um Android-Attribute handelt.

Daher muss diese Namensraumdeklaration im Eröffnungs-Tag der Stammansicht Ihrer XML-Datei enthalten sein.

Harter Dani
quelle
Einfach und klar. Ich weiß nichts über andere Antworten, aber Ihre Antwort wirkt wie ein Magnet für meine Verwirrung und mein Konzept ist jetzt klar.
Stapelüberlauf
3
  • Xmlns bedeutet XML-Namespace.
  • Es wurde erstellt, um Namenskonflikte in den XML-Dateien zu vermeiden.
  • Um Namenskonflikte auf andere Weise zu vermeiden, müssen wir jedem Element ein Präfix zuweisen.
  • Um die wiederholte Verwendung des Präfixes in jedem XML-Tag zu vermeiden, verwenden wir XMLS im Stammverzeichnis der XML. Daher haben wir das Tag xmlns: android = " http://schemas.android.com/apk/res/android "
  • Jetzt bedeutet Android hier einfach, dass wir ihm den Namespace " http://schemas.android.com/apk/res/android " zuweisen .
  • Dieser Namespace ist keine URL, sondern eine URI, die auch als URN (Universal Resource Name) bezeichnet wird und nur selten anstelle von URI verwendet wird.
  • Aus diesem Grund ist Android dafür verantwortlich, die androidbezogenen Elemente im XML-Dokument zu identifizieren, die android: xxxxxxx usw. wären. Ohne diesen Namespace wird android: xxxxxxx nicht erkannt.

Um es mit Laien zu sagen:

ohne xmlns: android = " http://schemas.android.com/apk/res/android " androidbezogene Tags werden im xml-Dokument unseres Layouts nicht erkannt.

Swapnil
quelle
2

In XML werden Elementnamen vom Entwickler definiert. Dies führt häufig zu einem Konflikt, wenn versucht wird, XML-Dokumente aus verschiedenen XML-Anwendungen zu mischen. Ein Benutzer oder eine XML-Anwendung weiß nicht, wie er mit diesen Unterschieden umgehen soll. Namenskonflikte in XML können mithilfe eines Namenspräfixes leicht vermieden werden. Bei Verwendung von Präfixen in XML muss ein Namespace für das Präfix definiert werden. Der Namespace kann durch ein xmlns-Attribut im Start-Tag eines Elements definiert werden. Die Namespace-Deklaration hat die folgende Syntax. xmlns: prefix = "URI".

Student
quelle
2
xmlns:android="http://schemas.android.com/apk/res/android"

Dies ist eine Form von xmlns: android = "@ + / id". Um es zu verweisen, verwenden wir zum Beispiel

android:layout_width="wrap_content"
android:text="Hello World!"

Eine andere XML ist

 xmlns:app="http://schemas.android.com/apk/res-auto"

Dies ist in Form von xmlns: app = "@ + / id" und seine Verwendung ist unten angegeben

 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintLeft_toLeftOf="parent"
Saleem Kalro
quelle
2

Ich denke, das wird mit dem Namespace deutlich, da wir unsere eigenen Attribute erstellen können und wenn das benutzerdefinierte Attribut mit dem Android-Attribut identisch ist, wird der Konflikt des Namespace vermieden.

Lila
quelle
2

xmlns: android Dies ist das Start-Tag zum Definieren des Android-Namespace in Android. Dies ist eine Standardkonvention, die vom Android-Google-Entwickler definiert wird. Wenn Sie Standard oder Custome verwenden und gestalten, muss dieser Namespace verwendet werden.

Definiert den Android-Namespace. Dieses Attribut sollte immer auf " http://schemas.android.com/apk/res/android " gesetzt sein.

Aus der <manifes>Elementdokumentation .

vikseln
quelle
1
xmlns:android="http://schemas.android.com/apk/res/android" 

xmlns : ist der XML-Namensraum und die URL: " http://schemas.android.com/apk/res/android " ist nichts anderes als

XSD ist [XML-Schemadefinition]: Wird verwendet, um Regeln für XML-Dateien zu definieren.

Beispiel:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" 
android:layout_width="match_parent"
android:layout_height="match_parent">

<EditText
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:layout_marginBottom="4dp"
   android:hint="User Name"
  />
</LinearLayout> 

Lassen Sie mich erklären, welche Art von Regeln? .

  1. In der obigen XML-Datei definieren wir bereits layout_width für unser Layout, WENN Sie dasselbe Attribut beim zweiten Mal definieren, wird eine Fehlermeldung angezeigt.
  2. EditText ist da, aber wenn Sie einen weiteren EditText hinzufügen möchten, ist dies kein Problem.

Solche Regeln werden in XML XSD definiert: " http://schemas.android.com/apk/res/android "

ein bisschen spät, aber ich hoffe das hilft dir.

Rashid Kalhoro
quelle
0

Es handelt sich um eine XML-Namensraumdeklaration, um anzugeben, dass die Attribute innerhalb der Ansichtsgruppe, in der sie abgebremst wird, mit Android zusammenhängen.

Jeff
quelle
Bitte erläutern Sie es weiter
Pramod S. Nikam