¿Por qué esta línea xmlns: android = "http://schemas.android.com/apk/res/android" debe ser la primera en el archivo xml de diseño?

Respuestas:

118

En XML, xmlns declara un espacio de nombres. De hecho, cuando haces:

<LinearLayout android:id>
</LinearLayout>

En lugar de llamar android:id, el xml usará http://schemas.android.com/apk/res/android:id para ser único. En general, esta página no existe (es un URI, no una URL), pero a veces es una URL que explica el espacio de nombres utilizado.

El espacio de nombres tiene casi los mismos usos que el nombre del paquete en una aplicación Java.

Aquí hay una explicación.

Identificador uniforme de recursos (URI)

Un identificador uniforme de recursos (URI) es una cadena de caracteres que identifica un recurso de Internet.

El URI más común es el Localizador Uniforme de Recursos (URL) que identifica una dirección de dominio de Internet. Otro tipo de URI no tan común es el Nombre de recurso universal (URN).

En nuestros ejemplos solo usaremos URL.

NitroG42
fuente
13
Entonces, ¿por qué tenemos en android:layout_widthlugar de solo layout_width?
Shashwat
44
Entonces, ¿cómo es que usamos "LinearLayout" en lugar de "android: LinearLayout"?
Desarrollador de Android el
Probablemente porque LinearLayout es parte del espacio de nombres raíz, y los atributos android: xxx son parte de un subespacio de nombre (" schemas.android.com/apk/res/android/android/id" )
NitroG42
44
Por supuesto, no obtiene esta url, es un URI: w3schools.com/xml/xml_namespaces.asp
NitroG42
1
De danielmiessler.com/study/url_vs_uri : "una URL es un tipo de URI. Entonces, si alguien le dice que una URL no es una URI, está equivocado. Pero eso no significa que todas las URI son URL. Todas las mariposas vuelan, pero no todo lo que vuela es una mariposa. La parte que hace que un URI sea una URL es la inclusión del "mecanismo de acceso" o "ubicación de red", por ejemplo http: /, ftp: //, ldap: //, telnet: / /, etc.
yonivav
37

Para entender por qué xmlns:android=“http://schemas.android.com/apk/res/android”debe ser el primero en el archivo xml de diseño Entenderemos los componentes usando un ejemplo

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>

Indicador uniforme de recursos (URI) :

  • En informática, un identificador uniforme de recursos (URI) es una cadena de caracteres utilizada para identificar el nombre de un recurso.
  • Dicha identificación permite la interacción con representaciones del recurso a través de una red, típicamente la World Wide Web, utilizando protocolos específicos.

Ej: http://schemas.android.com/apk/res/android:ides el URI aquí


Espacio de nombres XML :

  • Los espacios de nombres XML se utilizan para proporcionar elementos y atributos con nombres únicos en un documento XML. xmlns:androiddescribe el espacio de nombres de Android.
  • Se usa así porque es una opción de diseño de Google para manejar los errores en tiempo de compilación.
  • Supongamos también que escribimos nuestro propio textviewwidget con diferentes características en comparación con Android textview, el espacio de nombres de Android ayuda a distinguir entre nuestro textviewwidget personalizado y el textviewwidget de Android
Devrath
fuente
8
Vale la pena leer esta respuesta en comparación con las anteriores que no explican claramente "¿POR QUÉ?"
eRaisedToX
Usted decía: "Dicha identificación permite la interacción con representaciones del recurso a través de una red, típicamente la World Wide Web, utilizando protocolos específicos. Ej: schemas.android.com/apk/res/android:id es el URI aquí" - Pero si no tengo conexión a Internet, ¿cómo interactuará este espacio de nombres de Android con los recursos a través de una red?
kavie
29

xmlns se refiere al espacio de nombres XML

Cuando se usan prefijos en XML, se debe definir un llamado espacio de nombres para el prefijo. El espacio de nombres está definido por el atributo xmlns en la etiqueta de inicio de un elemento. La declaración del espacio de nombres tiene la siguiente sintaxis. xmlns: prefix = "URI".

Nota : El analizador no utiliza el URI del espacio de nombres para buscar información.

El propósito es darle al espacio de nombres un nombre único. Sin embargo, a menudo las empresas usan el espacio de nombres como un puntero a una página web que contiene información del espacio de nombres.

Martyn
fuente
7

Esto es solo la declaración del espacio de nombres XML. Utilizamos este espacio de nombres para especificar que los atributos enumerados a continuación pertenecen a Android. Así comienzan con " android: "

De hecho, puede crear sus propios atributos personalizados. Entonces, para evitar conflictos de nombres donde 2 atributos se denominan de la misma manera, pero se comportan de manera diferente, agregamos el prefijo " android: " para indicar que estos son atributos de Android.

Por lo tanto, esta declaración de espacio de nombres debe incluirse en la etiqueta de apertura de la vista raíz de su archivo XML.

Duro Dani
fuente
Simple y claro. No sé sobre otras respuestas, pero su respuesta funciona como un imán para mi confusión y mi concepto es claro ahora.
Stack Overflow
3
  • Xmlns significa espacio de nombres xml.
  • Está creado para evitar conflictos de nombres en los xml.
  • Para evitar conflictos de nombres de cualquier otra forma, debemos proporcionar a cada elemento un prefijo.
  • Para evitar el uso repetitivo del prefijo en cada etiqueta xml, usamos xmlns en la raíz del xml. Por lo tanto, tenemos la etiqueta xmlns: android = " http://schemas.android.com/apk/res/android "
  • Ahora, Android aquí simplemente significa que le estamos asignando el espacio de nombres " http://schemas.android.com/apk/res/android ".
  • Este espacio de nombres no es una URL sino un URI también conocido como URN (nombre de recurso universal) que rara vez se usa en lugar de URI.
  • Debido a esto, Android será responsable de identificar los elementos relacionados con Android en el documento XML que serían Android: xxxxxxx, etc. Sin este espacio de nombres, Android: xxxxxxx no será reconocido.

Para poner en términos simples:

sin xmlns: android = " http://schemas.android.com/apk/res/android " Las etiquetas relacionadas con Android no se reconocerán en el documento xml de nuestro diseño.

Swapnil
fuente
2

En XML, el desarrollador define los nombres de los elementos. Esto a menudo resulta en un conflicto al intentar mezclar documentos XML de diferentes aplicaciones XML. Un usuario o una aplicación XML no sabrá cómo manejar estas diferencias. Los conflictos de nombres en XML se pueden evitar fácilmente utilizando un prefijo de nombre. Cuando se usan prefijos en XML, se debe definir un espacio de nombres para el prefijo. El espacio de nombres se puede definir mediante un atributo xmlns en la etiqueta de inicio de un elemento. La declaración del espacio de nombres tiene la siguiente sintaxis. xmlns: prefix = "URI".

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

Esta es una forma de xmlns: android = "@ + / id". Ahora para referirnos usamos por ejemplo

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

Otro xmlns es

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

que está en forma de xmlns: app = "@ + / id" y su uso se da a continuación

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

Creo que queda claro con el espacio de nombres, ya que podemos crear nuestros propios atributos y si el atributo especificado por el usuario es el mismo que el de Android, evitará el conflicto del espacio de nombres.

Lila
fuente
2

xmlns: android Esta es la etiqueta de inicio para definir el espacio de nombres de Android en Android. Esta es la convención estándar definida por el desarrollador de Android de Google. cuando está usando un diseño predeterminado o personalizado, entonces debe usar este espacio de nombres.

Define el espacio de nombres de Android. Este atributo siempre debe establecerse en " http://schemas.android.com/apk/res/android ".

De la <manifes>documentación del elemento .

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

xmlns : es el espacio de nombre xml y la URL: " http://schemas.android.com/apk/res/android " no es más que

XSD que es [definición de esquema XML]: que se utiliza para definir reglas para el archivo XML.

Ejemplo:

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

Déjame explicarte ¿Qué tipo de reglas? .

  1. En el archivo XML anterior, ya definimos layout_width para nuestro diseño ahora SI definirá el mismo atributo la segunda vez que obtendrá un error.
  2. EditText está ahí, pero si desea agregar otro EditText no hay problema.

Este tipo de reglas se definen en XML XSD: " http://schemas.android.com/apk/res/android "

un poco tarde pero espero que esto te ayude.

Rashid Kalhoro
fuente
0

Es una declaración de espacio de nombre XML para especificar que los atributos que están dentro del grupo de vista en el que se desacelera están relacionados con Android.

jeff
fuente
por favor elabore más
Pramod S. Nikam