Por que esta linha xmlns: android = "http://schemas.android.com/apk/res/android" deve ser a primeira no arquivo xml de layout?

156

Por que essa linha é necessária no arquivo de layout xml?

xmlns:android="http://schemas.android.com/apk/res/android" 
Hitesh Dhamshaniya
fonte
Não precisa estar na primeira linha?
Aada 7/08/18

Respostas:

118

Em XML, xmlns declara um espaço para nome. De fato, quando você faz:

<LinearLayout android:id>
</LinearLayout>

Em vez de chamar android:id, o xml usará http://schemas.android.com/apk/res/android:id para ser exclusivo. Geralmente, esta página não existe (é um URI, não um URL), mas às vezes é um URL que explica o espaço para nome usado.

O espaço para nome tem praticamente os mesmos usos que o nome do pacote em um aplicativo Java.

Aqui está uma explicação.

Identificador Uniforme de Recursos (URI)

Um URI (Uniform Resource Identifier) ​​é uma sequência de caracteres que identifica um Recurso na Internet.

O URI mais comum é o URL (Uniform Resource Locator) que identifica um endereço de domínio da Internet. Outro tipo de URI não tão comum é o Universal Resource Name (URN).

Nos nossos exemplos, usaremos apenas URLs.

NitroG42
fonte
13
Então, por que temos em android:layout_widthvez de apenas layout_width?
Shashwat 01/03
4
Então, como é que usamos "LinearLayout" em vez de "android: LinearLayout"?
desenvolvedor android
Provavelmente porque LinearLayout fazem parte do namespace raiz, e android: atributos xxx fazem parte de um subnamespace ( " schemas.android.com/apk/res/android/android/id" )
NitroG42
4
Claro que não vai buscar este url, é um URI: w3schools.com/xml/xml_namespaces.asp
NitroG42
1
Em danielmiessler.com/study/url_vs_uri : "um URL é um tipo de URI. Portanto, se alguém lhe diz que um URL não é um URI, ele está errado. Mas isso não significa que todos os URIs são URLs. Todas as borboletas voam, mas nem tudo o que voa é uma borboleta.A parte que transforma um URL em um URI é a inclusão do “mecanismo de acesso” ou “local da rede”, por exemplo, http: /, ftp: //, ldap: //, telnet: / /, etc.
yonivav
37

Para entender por que xmlns:android=“http://schemas.android.com/apk/res/android”deve ser o primeiro no arquivo xml de layout Nós entenderemos os componentes usando um exemplo

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

  • Na computação, um URI (Uniform Resource Identifier) ​​é uma sequência de caracteres usada para identificar o nome de um recurso.
  • Essa identificação permite a interação com representações do recurso em uma rede, geralmente na World Wide Web, usando protocolos específicos.

Ex: http://schemas.android.com/apk/res/android:idé o URI aqui


Namespace XML :

  • Os espaços para nome XML são usados ​​para fornecer elementos e atributos nomeados exclusivamente em um documento XML. xmlns:androiddescreve o espaço para nome do android.
  • É usado assim, porque é uma opção de design do Google para lidar com os erros em tempo de compilação.
  • Suponhamos também que escrevamos nosso próprio textviewwidget com recursos diferentes em comparação com o Android textview, o namespace Android ajuda a distinguir entre nosso textviewwidget personalizado e o textviewwidget Android
Devrath
fonte
8
vale a pena ler esta resposta em comparação com as anteriores, que não explicaram claramente "POR QUÊ?"
eRaisedToX 4/17/17
Você estava dizendo: "Essa identificação permite a interação com representações do recurso em uma rede, geralmente na World Wide Web, usando protocolos específicos. Ex: schemas.android.com/apk/res/android:id é o URI aqui" - Mas, se eu não tenho conexão com a Internet, como esse espaço para nome do Android irá interagir com os recursos em uma rede?
kavie
29

xmlns refere-se ao espaço para nome XML

Ao usar prefixos em XML, um chamado espaço para nome para o prefixo deve ser definido. O espaço para nome é definido pelo atributo xmlns na tag start de um elemento. A declaração do namespace possui a seguinte sintaxe. xmlns: prefixo = "URI".

Nota : O URI do namespace não é usado pelo analisador para procurar informações.

O objetivo é atribuir ao namespace um nome exclusivo. No entanto, muitas vezes as empresas usam o espaço para nome como um ponteiro para uma página da Web que contém informações sobre o espaço para nome.

Martyn
fonte
7

Esta é apenas a declaração do XML Name Space. Usamos esse espaço de nome para especificar que os atributos listados abaixo pertencem ao Android. Assim, eles começam com " android: "

Você pode realmente criar seus próprios atributos personalizados. Portanto, para evitar conflitos de nome onde 2 atributos são nomeados da mesma coisa, mas se comportam de maneira diferente, adicionamos o prefixo " android: " para indicar que esses são atributos do Android.

Portanto, essa declaração de espaço de nome deve ser incluída na tag de abertura da visualização raiz do seu arquivo XML.

Harsh Dani
fonte
Simples e claro. Eu não sei sobre outras respostas, mas sua resposta funciona como ímã para minha confusão e meu conceito está claro agora.
Stack Overflow
3
  • Xmlns significa espaço para nome xml.
  • Ele é criado para evitar conflitos de nomes nos xml's.
  • Para evitar conflitos de nomenclatura de qualquer outra maneira, precisamos fornecer um prefixo para cada elemento.
  • para evitar o uso repetitivo do prefixo em cada tag xml, usamos xmlns na raiz do xml. Portanto, temos a tag xmlns: android = ” http://schemas.android.com/apk/res/android
  • Agora Android aqui significa simplesmente que estamos atribuindo o namespace " http://schemas.android.com/apk/res/android " a ele.
  • Esse espaço para nome não é um URL, mas um URI também conhecido como URN (nome universal do recurso), que raramente é usado no lugar do URI.
  • Devido a este android, será responsável por identificar os elementos relacionados ao android no documento xml, que seria android: xxxxxxx etc. Sem esse espaço para nome android: xxxxxxx não será reconhecido.

Para colocar no termo leigo:

sem xmlns: android = ” http://schemas.android.com/apk/res/android ” as tags relacionadas ao Android não serão reconhecidas no documento xml do nosso layout.

Swapnil
fonte
2

No XML, os nomes dos elementos são definidos pelo desenvolvedor. Isso geralmente resulta em conflito ao tentar misturar documentos XML de diferentes aplicativos XML. Um usuário ou um aplicativo XML não saberá como lidar com essas diferenças. Os conflitos de nome no XML podem ser facilmente evitados usando um prefixo de nome. Ao usar prefixos em XML, um espaço para nome para o prefixo deve ser definido. O espaço para nome pode ser definido por um atributo xmlns na marca de início de um elemento. A declaração do espaço para nome possui a seguinte sintaxe. xmlns: prefixo = "URI".

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

Esta é a forma do xmlns: android = "@ + / id". Agora, para referencia-lo, usamos, por exemplo

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

Outro xmlns é

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

que está na forma de xmlns: app = "@ + / id" e seu uso é dado abaixo

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

Eu acho que fica claro com o namespace, pois podemos criar nossos próprios atributos e, se o atributo especificado pelo usuário for o mesmo do Android, evite o conflito do namespace.

Lilás
fonte
2

xmlns: android Esta é a tag de início para definir o namespace do Android no Android. Esta é a convenção standerd definida pelo desenvolvedor do google android. Quando você estiver usando o layout padrão ou personalizado, deverá usar este espaço para nome.

Define o espaço para nome do Android. Este atributo sempre deve ser definido como " http://schemas.android.com/apk/res/android ".

A partir da <manifes>documentação do elemento .

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

xmlns : é o espaço para nome xml e a URL: " http://schemas.android.com/apk/res/android " não passa de

XSD, que é [definição do esquema XML]: que é usado para definir regras para o arquivo XML.

Exemplo:

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

Deixe-me explicar que tipo de regras? .

  1. No arquivo XML acima, já definimos layout_width para o nosso layout agora, se você definir o mesmo atributo na segunda vez que receber um erro.
  2. EditText está lá, mas se você quiser adicionar outro EditText, não há problema.

Esse tipo de regra é definido no XML XSD: " http://schemas.android.com/apk/res/android "

um pouco tarde, mas espero que isso ajude você.

Rashid Kalhoro
fonte
0

É uma declaração de espaço de nome XML para especificar que os atributos que estão dentro do grupo de visualizações em que está desacelerado estão relacionados ao Android.

jeff
fonte
por favor elabore-o mais
Pramod S. Nikam