Чому цей рядок xmlns: android = “http://schemas.android.com/apk/res/android” повинен бути першим у файлі xml-макета?


Відповіді:


118

У XML xmlns оголошує простір імен. Насправді, коли ви робите:

<LinearLayout android:id>
</LinearLayout>

Замість виклику android:idxml використовуватиме http://schemas.android.com/apk/res/android:id для унікальності. Зазвичай ця сторінка не існує (це URI, а не URL), але іноді це URL, що пояснює використовуваний простір імен.

Простір імен в значній мірі використовує як ім'я пакета в додатку Java.

Ось пояснення.

Уніфікований ідентифікатор ресурсу (URI)

Уніфікований ідентифікатор ресурсу (URI) - це рядок символів, який ідентифікує Інтернет-ресурс.

Найпоширеніший URI - це Уніфікований локатор ресурсів (URL), який ідентифікує адресу домену в Інтернеті. Іншим, не таким поширеним типом URI є Універсальна назва ресурсу (URN).

У наших прикладах ми будемо використовувати лише URL-адреси.


13
Тоді чому ми маємо android:layout_widthзамість просто layout_width?
Шашват

4
Тоді чому ми використовуємо "LinearLayout" замість "android: LinearLayout"?
андроїд розробник

Можливо, тому, що LinearLayout є частиною кореневого простору імен, а атрибути android: xxx є частиною простору імен (" schemas.android.com/apk/res/android/android/id" )
NitroG42

4
Звичайно, він не отримує цей URL, це URI: w3schools.com/xml/xml_namespaces.asp
NitroG42

1
Від danielmiessler.com/study/url_vs_uri : "URL-адреса - це тип URI. Тож, якщо хтось скаже вам, що URL-адреса не є URI, він помиляється. Але це не означає, що всі URI-адреси є URL-адресами. Всі метелики літають, але Не все, що летить - це метелик. Частина, яка робить URI URL, - це включення "механізму доступу" або "мережевого розташування", наприклад, http: /, ftp: //, ldap: //, telnet: / / і т. д.
yonivav

37

Щоб зрозуміти, чому xmlns:android=“http://schemas.android.com/apk/res/android”повинен бути першим у макеті xml-файл, ми розберемо компоненти на прикладі

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>

Уніфікований показник ресурсів (URI) :

  • При обчисленні рівномірний ідентифікатор ресурсу (URI) - це рядок символів, який використовується для ідентифікації імені ресурсу.
  • Така ідентифікація дозволяє взаємодіяти з представленнями ресурсу по мережі, як правило, у всесвітній павутині, використовуючи конкретні протоколи.

Наприклад: http://schemas.android.com/apk/res/android:idтут URI


Простір імен XML :

  • Простори імен XML використовуються для надання однозначно названих елементів та атрибутів у документі XML. xmlns:androidописує простір імен для android.
  • Її використовують так, оскільки Google - це вибір дизайну для обробки помилок під час компіляції.
  • Також припустимо, що ми пишемо власний textviewвіджет з різними можливостями порівняно з андроїдом textview, а також простір імен для Android допомагає розрізняти наш користувальницький textviewвіджет та textviewвіджет Android

8
цю відповідь дійсно варто прочитати порівняно з вищезгаданими, які не пояснили чітко "ЧОМУ?"
eRaisedToX

Ви говорили так: "Така ідентифікація дозволяє взаємодіяти з представленнями ресурсу по мережі, як правило, у всесвітній павутині, використовуючи конкретні протоколи. Наприклад: schemas.android.com/apk/res/android:id тут є URI" - Але якщо у мене немає підключення до Інтернету, як цей простір імен Android буде взаємодіяти з ресурсами по мережі?
kavie

29

xmlns відноситься до простору імен XML

Під час використання префіксів у XML повинен бути визначений так званий простір імен для префікса. Простір імен визначається атрибутом xmlns у початковому тезі елемента. Декларація простору імен має такий синтаксис. xmlns: prefix = "URI".

Примітка : URI простору імен не використовується аналізатором для пошуку інформації.

Мета - надати простору імен унікальне ім’я. Однак часто компанії використовують простір імен як вказівник на веб-сторінку, що містить інформацію про простір імен.


7

Це лише декларація простір імен XML. Цей простір імен ми використовуємо для того, щоб вказати, що перелічені нижче атрибути належать Android. Таким чином вони починаються з " android: "

Ви можете створити власні атрибути. Отже, щоб запобігти конфліктам імен, де 2 атрибути названі однаково, але поводяться по-різному, ми додамо префікс " android: ", щоб позначити, що це атрибути Android.

Таким чином, ця декларація пробілу імен повинна бути включена в тег відкриття кореневого виду вашого XML-файлу.


Простий і зрозумілий. Я не знаю про інші відповіді, але ваша відповідь працює як магніт на мою розгубленість, і моя концепція зрозуміла зараз.
Переповнення стека


3
  • Xmlns означає простір імен xml.
  • Він створений, щоб уникнути називання конфліктів у xml.
  • Щоб уникнути називання конфліктів будь-яким іншим способом, нам потрібно надати кожному елементу префікс.
  • щоб уникнути повторного використання префікса у кожному тезі xml, ми використовуємо xmlns у корені xml. Отже, у нас є тег xmlns: android = ” http://schemas.android.com/apk/res/android
  • Тепер Android тут просто означає, що ми присвоюємо йому простір імен " http://schemas.android.com/apk/res/android ".
  • Цей простір імен не є URL-адресою, а URI, також відомим як URN (універсальна назва ресурсу), що рідко використовується замість URI.
  • Завдяки цьому андроїд буде нести відповідальність за ідентифікацію елементів, пов'язаних з андроїдом, у документі xml, який би був android: xxxxxxx тощо. Без цього простору імен android: xxxxxxx не буде розпізнано.

Ввести термін мирянина:

без xmlns: android = ” http://schemas.android.com/apk/res/android ” теги, пов’язані з android, не будуть розпізнані в XML-документі нашого макета.


2

У XML імена елементів визначаються розробником. Це часто призводить до конфлікту при спробі змішування XML-документів з різних XML-програм. Користувач або програма XML не знають, як вирішити ці відмінності. Конфліктів імен у XML легко уникнути, використовуючи префікс імені. Під час використання префіксів у XML необхідно визначити простір імен для префікса. Простір імен може бути визначений атрибутом xmlns у початковому тезі елемента. Декларація простору імен має такий синтаксис. xmlns: prefix = "URI".


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

Це форма xmlns: android = "@ + / id". Тепер для позначення його ми використовуємо, наприклад

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

Ще xmlns є

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

який у вигляді xmlns: app = "@ + / id", і його використання наведено нижче

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

2

Я думаю, що це зрозуміло з простором імен, оскільки ми можемо створювати власні атрибути, і якщо вказаний користувачем атрибут такий же, як і Android, він уникає конфлікту простору імен.


2

xmlns: android Це стартовий тег для визначення простору імен Android для Android. Це стандартний конвенцію, визначений розробником Android android google. коли ви використовуєте макет за замовчуванням або зберігання, потрібно використовувати це простір імен.

Визначає простір імен Android. Цей атрибут завжди має бути встановлено на " http://schemas.android.com/apk/res/android ".

З <manifes>елемента документації .


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

xmlns : це простір імен xml і URL: " http://schemas.android.com/apk/res/android " - це не що інше, як

XSD - це [визначення схеми XML]: яке використовується для визначення правил для файлу XML.

Приклад:

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

Дозвольте мені пояснити, які види правил? .

  1. У наведеному вище XML-файлі ми вже визначаємо layout_width для нашого макета, тепер якщо ви визначите той самий атрибут вдруге, ви отримаєте помилку.
  2. EditText є, але якщо ви хочете додати інший EditText, немає проблем.

Такі види правил визначені в XML XSD: " http://schemas.android.com/apk/res/android "

трохи пізно, але я сподіваюся, що це вам допоможе.


0

Це декларація простору імен XML, щоб вказати, що атрибути, що знаходяться в групі перегляду, в якій вона уповільнена, пов'язані з android.


уточнюйте детальніше
Pramod S. Nikam
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.