Perché questa riga xmlns: android = "http://schemas.android.com/apk/res/android" deve essere la prima nel file xml del layout?


Risposte:


118

In XML, xmlns dichiara uno spazio dei nomi. In effetti, quando lo fai:

<LinearLayout android:id>
</LinearLayout>

Invece di chiamare android:id, l'xml utilizzerà http://schemas.android.com/apk/res/android:id per essere unico. Generalmente questa pagina non esiste (è un URI, non un URL), ma a volte è un URL che spiega lo spazio dei nomi utilizzato.

Lo spazio dei nomi ha praticamente gli stessi usi del nome del pacchetto in un'applicazione Java.

Ecco una spiegazione

Uniform Resource Identifier (URI)

Un URI (Uniform Resource Identifier) ​​è una stringa di caratteri che identifica una risorsa Internet.

L'URI più comune è l'Uniform Resource Locator (URL) che identifica un indirizzo di dominio Internet. Un altro tipo di URI non così comune è l'URN (Universal Resource Name).

Nei nostri esempi utilizzeremo solo URL.


13
Allora perché abbiamo android:layout_widthinvece di solo layout_width?
Shashwat

4
Allora come mai usiamo "LinearLayout" invece di "android: LinearLayout"?
sviluppatore Android

Probabilmente perché LinearLayout fa parte dello spazio dei nomi radice e android: gli attributi xxx fanno parte di uno spazio dei nomi secondari (" schemas.android.com/apk/res/android/android/id" )
NitroG42

4
Ovviamente non recupera questo url, è un URI: w3schools.com/xml/xml_namespaces.asp
NitroG42

1
Da danielmiessler.com/study/url_vs_uri : "un URL è un tipo di URI. Quindi, se qualcuno ti dice che un URL non è un URI, si sbaglia. Ma questo non significa che tutti gli URI siano URL. Tutte le farfalle volano, ma non tutto ciò che vola è una farfalla. La parte che trasforma un URI in un URL è l'inclusione del "meccanismo di accesso", o "posizione della rete", ad esempio http: /, ftp: //, ldap: //, telnet: / /, ecc.
yonivav il

37

Per capire perché xmlns:android=“http://schemas.android.com/apk/res/android”deve essere il primo nel file xml di layout Dovremo comprendere i componenti usando un esempio

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) :

  • Nell'informatica, un identificatore di risorsa uniforme (URI) è una stringa di caratteri utilizzata per identificare un nome di una risorsa.
  • Tale identificazione consente l'interazione con le rappresentazioni della risorsa su una rete, in genere il World Wide Web, utilizzando protocolli specifici.

Es: http://schemas.android.com/apk/res/android:idè l'URI qui


Spazio dei nomi XML :

  • Gli spazi dei nomi XML vengono utilizzati per fornire elementi e attributi con un nome univoco in un documento XML. xmlns:androiddescrive lo spazio dei nomi Android.
  • È usato in questo modo perché questa è una scelta progettuale di google per gestire gli errori in fase di compilazione.
  • Supponiamo inoltre di scrivere il nostro textviewwidget con funzionalità diverse rispetto ad Android textview, lo spazio dei nomi Android aiuta a distinguere tra il nostro textviewwidget personalizzato e il textviewwidget Android

8
vale davvero la pena leggere questa risposta rispetto a quelle sopra che non spiegavano chiaramente "PERCHÉ?"
eRaisedToX

Dicevi : "Tale identificazione consente l'interazione con le rappresentazioni della risorsa su una rete, in genere il World Wide Web, utilizzando protocolli specifici. Es: schemas.android.com/apk/res/android:id è l'URI qui" - Ma se non ho una connessione Internet, come questo spazio dei nomi Android interagirà con le risorse su una rete?
kavie,

29

xmlns si riferisce allo spazio dei nomi XML

Quando si utilizzano prefissi in XML, è necessario definire un cosiddetto spazio dei nomi per il prefisso. Lo spazio dei nomi è definito dall'attributo xmlns nel tag iniziale di un elemento. La dichiarazione dello spazio dei nomi ha la sintassi seguente. xmlns: prefix = "URI".

Nota : l'URI dello spazio dei nomi non viene utilizzato dal parser per cercare informazioni.

Lo scopo è di assegnare allo spazio dei nomi un nome univoco. Tuttavia, spesso le aziende utilizzano lo spazio dei nomi come puntatore a una pagina Web contenente informazioni sullo spazio dei nomi.


7

Questa è solo la dichiarazione dello spazio dei nomi XML. Usiamo questo spazio dei nomi per specificare che gli attributi elencati di seguito appartengono ad Android. Quindi iniziano con " android: "

Puoi effettivamente creare i tuoi attributi personalizzati. Quindi, per evitare conflitti di nome in cui 2 attributi sono denominati la stessa cosa, ma si comportano in modo diverso, aggiungiamo il prefisso " android: " per indicare che si tratta di attributi Android.

Pertanto, questa dichiarazione dello spazio dei nomi deve essere inclusa nel tag di apertura della vista principale del file XML.


Semplice e chiaro Non conosco altre risposte, ma la tua risposta funziona come una calamita per la mia confusione e il mio concetto è chiaro ora.
Stack Overflow


3
  • Xmlns significa spazio dei nomi xml.
  • È stato creato per evitare conflitti di denominazione nei file XML.
  • Al fine di evitare conflitti di denominazione in qualsiasi altro modo, dobbiamo fornire a ciascun elemento un prefisso.
  • per evitare l'uso ripetitivo del prefisso in ogni tag xml utilizziamo xmlns alla radice dell'xml. Quindi abbiamo il tag xmlns: android = " http://schemas.android.com/apk/res/android "
  • Ora Android qui significa semplicemente che stiamo assegnando lo spazio dei nomi " http://schemas.android.com/apk/res/android ".
  • Questo spazio dei nomi non è un URL ma un URI noto anche come URN (nome di risorsa universale) che viene usato raramente al posto dell'URI.
  • A causa di questo androide sarà responsabile di identificare gli elementi relativi ad Android nel documento XML che sarebbe android: xxxxxxx ecc. Senza questo spazio dei nomi android: xxxxxxx non verrà riconosciuto.

In parole povere:

senza xmlns: android = " http://schemas.android.com/apk/res/android " i tag relativi ad Android non saranno riconosciuti nel documento xml del nostro layout.


2

In XML, i nomi degli elementi sono definiti dallo sviluppatore. Ciò si traduce spesso in un conflitto quando si tenta di mescolare documenti XML da diverse applicazioni XML. Un utente o un'applicazione XML non sapranno come gestire queste differenze. I conflitti di nomi in XML possono essere facilmente evitati usando un prefisso. Quando si utilizzano prefissi in XML, è necessario definire uno spazio dei nomi per il prefisso. Lo spazio dei nomi può essere definito da un attributo xmlns nel tag iniziale di un elemento. La dichiarazione dello spazio dei nomi ha la seguente sintassi. xmlns: prefix = "URI".


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

Questa è la forma di xmlns: android = "@ + / id". Ora per fare riferimento, usiamo ad esempio

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

Un altro xmlns è

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

che è in forma di xmlns: app = "@ + / id" e il suo uso è indicato di seguito

 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintLeft_toLeftOf="parent"

2

Penso che sia chiaro con lo spazio dei nomi, in quanto possiamo creare i nostri attributi e se l'attributo specificato dall'utente è lo stesso di quello Android, eviterà il conflitto dello spazio dei nomi.


2

xmlns: android Questo è il tag iniziale per definire lo spazio dei nomi Android in Android. Questa è la convenzione standerd definita dallo sviluppatore google android. quando si utilizza e layout predefinito o personalizzato, è necessario utilizzare questo spazio dei nomi.

Definisce lo spazio dei nomi Android. Questo attributo deve essere sempre impostato su " http://schemas.android.com/apk/res/android ".

Dalla <manifes>documentazione dell'elemento .


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

xmlns : è lo spazio dei nomi xml e l' URL: " http://schemas.android.com/apk/res/android " non è altro che

XSD che è [definizione dello schema XML]: utilizzato per definire le regole per il file XML.

Esempio :

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

Lasciami spiegare What Kind of Rules? .

  1. Nel file XML sopra abbiamo già definito layout_width per il nostro layout ora SE definirai lo stesso attributo una seconda volta che otterrai un errore.
  2. EditText è presente ma se si desidera aggiungere un altro EditText nessun problema.

Tale tipo di regole sono definite in XML XSD: " http://schemas.android.com/apk/res/android "

un po 'tardi ma spero che questo ti aiuti.


0

È una dichiarazione dello spazio dei nomi XML per specificare che gli attributi all'interno del gruppo di viste in cui è rallentato sono correlati ad Android.


per favore,
elaboralo di
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.