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


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.


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

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.


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.


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.


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".


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"

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.


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 .


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.


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.


Bitte erläutern Sie es weiter
Pramod S. Nikam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.