Pourquoi cette ligne xmlns: android = "http://schemas.android.com/apk/res/android" doit être la première du fichier xml de mise en page?

156

Pourquoi cette ligne est-elle nécessaire dans le fichier de mise en page xml?

xmlns:android="http://schemas.android.com/apk/res/android" 
Hitesh Dhamshaniya
la source
Il n'a pas besoin d'être sur la première ligne?
Aada

Réponses:

118

En XML, xmlns déclare un espace de noms. En fait, lorsque vous faites:

<LinearLayout android:id>
</LinearLayout>

Au lieu d'appeler android:id, le xml utilisera http://schemas.android.com/apk/res/android:id pour être unique. Généralement, cette page n'existe pas (c'est un URI, pas une URL), mais parfois c'est une URL qui explique l'espace de noms utilisé.

L'espace de noms a à peu près les mêmes utilisations que le nom du package dans une application Java.

Voici une explication.

Identificateur de ressource uniforme (URI)

Un identificateur de ressource uniforme (URI) est une chaîne de caractères qui identifie une ressource Internet.

L'URI le plus courant est l'URL (Uniform Resource Locator) qui identifie une adresse de domaine Internet. Un autre type d'URI pas si courant est le nom de ressource universel (URN).

Dans nos exemples, nous n'utiliserons que des URL.

NitroG42
la source
13
Alors pourquoi avons-nous android:layout_widthau lieu de juste layout_width?
Shashwat
4
Alors comment se fait-il que nous utilisions "LinearLayout" au lieu de "android: LinearLayout"?
développeur android
Probablement parce que LinearLayout fait partie de l'espace de noms racine et que les attributs android: xxx font partie d'un sous-espace de noms (" schemas.android.com/apk/res/android/android/id" )
NitroG42
4
Bien sûr, il ne récupère pas cette url, c'est un URI: w3schools.com/xml/xml_namespaces.asp
NitroG42
1
De danielmiessler.com/study/url_vs_uri : "une URL est un type d'URI. Donc, si quelqu'un vous dit qu'une URL n'est pas un URI, il se trompe. Mais cela ne veut pas dire que tous les URI sont des URL. Tous les papillons volent, mais tout ce qui vole n'est pas un papillon. La partie qui fait d'un URI une URL est l'inclusion du «mécanisme d'accès», ou «emplacement réseau», par exemple http: /, ftp: //, ldap: //, telnet: / /, etc.
yonivav
37

Pour comprendre pourquoi xmlns:android=“http://schemas.android.com/apk/res/android”doit être le premier dans le fichier xml de mise en page Nous allons comprendre les composants à l'aide d'un exemple

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>

Indicateur de ressource uniforme (URI) :

  • En informatique, un identifiant de ressource uniforme (URI) est une chaîne de caractères utilisée pour identifier le nom d'une ressource.
  • Une telle identification permet une interaction avec des représentations de la ressource sur un réseau, généralement le World Wide Web, en utilisant des protocoles spécifiques.

Ex: http://schemas.android.com/apk/res/android:idest l'URI ici


Espace de noms XML :

  • Les espaces de noms XML sont utilisés pour fournir des éléments et des attributs nommés de manière unique dans un document XML. xmlns:androiddécrit l'espace de noms Android.
  • Il est utilisé comme ça car c'est un choix de conception par Google pour gérer les erreurs au moment de la compilation.
  • Supposons également que nous écrivions notre propre textviewwidget avec des fonctionnalités différentes par rapport à Android textview, l'espace de noms Android permet de faire la distinction entre notre textviewwidget personnalisé et le textviewwidget Android
Devrath
la source
8
cette réponse vaut vraiment la peine d'être lue par rapport à celles ci-dessus qui n'expliquaient pas clairement "POURQUOI?"
eRaisedToX
Vous disiez : "Une telle identification permet une interaction avec les représentations de la ressource sur un réseau, généralement le World Wide Web, en utilisant des protocoles spécifiques. Ex: schemas.android.com/apk/res/android:id est l'URI ici" - Mais si je n'ai pas de connexion Internet, comment cet espace de noms Android interagira avec les ressources sur un réseau?
kavie le
29

xmlns fait référence à l' espace de noms XML

Lors de l'utilisation de préfixes dans XML, un soi-disant espace de noms pour le préfixe doit être défini. L'espace de noms est défini par l'attribut xmlns dans la balise de début d'un élément. La déclaration d'espace de noms a la syntaxe suivante. xmlns: prefix = "URI".

Remarque : l'URI de l'espace de noms n'est pas utilisé par l'analyseur pour rechercher des informations.

Le but est de donner à l'espace de noms un nom unique. Cependant, les entreprises utilisent souvent l'espace de noms comme pointeur vers une page Web contenant des informations d'espace de noms.

Martyn
la source
7

Il ne s'agit que de la déclaration d'espace de nom XML. Nous utilisons cet espace de noms pour spécifier que les attributs listés ci-dessous appartiennent à Android. Ainsi, ils commencent par " android: "

Vous pouvez en fait créer vos propres attributs personnalisés. Donc, pour éviter les conflits de nom où 2 attributs sont nommés de la même façon, mais se comportent différemment, nous ajoutons le préfixe « android: » pour signifier qu'il s'agit d'attributs Android.

Ainsi, cette déclaration d'espace de noms doit être incluse dans la balise d'ouverture de la vue racine de votre fichier XML.

Harsh Dani
la source
Simple et clair. Je ne connais pas d'autres réponses mais votre réponse fonctionne comme un aimant à ma confusion et mon concept est clair maintenant.
Stack Overflow
3
  • Xmlns signifie espace de noms xml.
  • Il est créé pour éviter les conflits de noms dans les fichiers XML.
  • Afin d'éviter les conflits de noms de toute autre manière, nous devons fournir à chaque élément un préfixe.
  • pour éviter l'utilisation répétitive du préfixe dans chaque balise xml, nous utilisons xmlns à la racine du xml. Nous avons donc la balise xmlns: android = " http://schemas.android.com/apk/res/android "
  • Maintenant, Android signifie simplement que nous lui attribuons l'espace de noms « http://schemas.android.com/apk/res/android ».
  • Cet espace de noms n'est pas une URL mais un URI également appelé URN (Universal Resource Name) qui est rarement utilisé à la place de l'URI.
  • En raison de cet android sera responsable d'identifier les éléments liés à android dans le document xml qui seraient android: xxxxxxx etc. Sans cet espace de noms android: xxxxxxx ne sera pas reconnu.

Pour mettre en termes simples:

sans xmlns: android = " http://schemas.android.com/apk/res/android " les balises liées à android ne seront pas reconnues dans le document xml de notre mise en page.

Swapnil
la source
2

En XML, les noms d'éléments sont définis par le développeur. Cela entraîne souvent un conflit lorsque vous essayez de mélanger des documents XML à partir de différentes applications XML. Un utilisateur ou une application XML ne saura pas comment gérer ces différences. Les conflits de nom dans XML peuvent facilement être évités en utilisant un préfixe de nom. Lors de l'utilisation de préfixes dans XML, un espace de noms pour le préfixe doit être défini. L'espace de noms peut être défini par un attribut xmlns dans la balise de début d'un élément. La déclaration d'espace de noms a la syntaxe suivante. xmlns: prefix = "URI".

étudiant
la source
2
xmlns:android="http://schemas.android.com/apk/res/android"

C'est la forme de xmlns: android = "@ + / id". Maintenant, pour le référencer, nous utilisons par exemple

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

Un autre xmlns est

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

qui se présente sous la forme de xmlns: app = "@ + / id" et son utilisation est donnée ci-dessous

 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintLeft_toLeftOf="parent"
Saleem Kalro
la source
2

Je pense que cela est clair avec l'espace de noms, car nous pouvons créer nos propres attributs et si l'attribut spécifié par l'utilisateur est le même que celui d'Android, cela évite le conflit de l'espace de noms.

Lilas
la source
2

xmlns: android Il s'agit de la balise de démarrage pour définir l'espace de noms Android dans Android. Il s'agit d'une convention standard définie par le développeur Android Google. lorsque vous utilisez et layout default ou custome, vous devez utiliser cet espace de noms.

Définit l'espace de noms Android. Cet attribut doit toujours être défini sur " http://schemas.android.com/apk/res/android ".

De la <manifes>documentation de l' élément .

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

xmlns : est l'espace de nom xml et l' URL: " http://schemas.android.com/apk/res/android " n'est rien d'autre

XSD qui est [définition de schéma XML]: qui est utilisé pour définir les règles pour le fichier XML.

Exemple :

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

Laissez-moi vous expliquer quel genre de règles? .

  1. Dans le fichier XML ci-dessus, nous définissons déjà layout_width pour notre mise en page maintenant SI vous définirez le même attribut la deuxième fois, vous obtiendrez une erreur.
  2. EditText est là mais si vous voulez ajouter un autre EditText pas de problème.

Ce type de règles est défini dans XML XSD: " http://schemas.android.com/apk/res/android "

un peu tard mais j'espère que cela vous aidera.

Rashid Kalhoro
la source
0

Il s'agit d'une déclaration d'espace de nom XML afin de spécifier que les attributs qui se trouvent dans le groupe de vues dans lequel il est décéléré sont liés à Android.

Jeff
la source
s'il vous plaît élaborer plus
Pramod S.Nikam