Почему эта строка 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»?
Android-разработчик

Возможно, потому что 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виджет с различными функциями по сравнению с Android textview, пространство имен Android помогает различать наш пользовательский textviewвиджет и textviewвиджет Android

8
этот ответ действительно стоит прочитать по сравнению с вышеупомянутыми, в которых не было четкого объяснения "ПОЧЕМУ?"
eRaisedToX

Вы говорили: «Такая идентификация позволяет взаимодействовать с представлениями ресурса в сети, обычно во всемирной паутине, с использованием определенных протоколов. Например : schemas.android.com/apk/res/android:id - это URI здесь» - Но если у меня нет подключения к Интернету, как это пространство имен Android будет взаимодействовать с ресурсами по сети?
Кави

29

xmlns ссылается на пространство имен XML

При использовании префиксов в XML должно быть определено так называемое пространство имен для префикса. Пространство имен определяется атрибутом xmlns в начальном теге элемента. Объявление пространства имен имеет следующий синтаксис. XMLNS: префикс = "URI".

Заметка : URI пространства имен не используется анализатором для поиска информации.

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


7

Это всего лишь объявление пространства имен XML. Мы используем это пространство имен, чтобы указать, что перечисленные ниже атрибуты принадлежат Android. Таким образом, они начинаются с " Android: "

Вы можете создавать свои собственные атрибуты. Поэтому, чтобы предотвратить конфликт имен, когда два атрибута названы одинаково, но ведут себя по-разному, мы добавляем префикс « android: », чтобы указать, что это атрибуты Android.

Таким образом, это объявление пространства имен должно быть включено в открывающий тег корневого представления вашего XML-файла.


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


3
  • Xmlns означает пространство имен xml.
  • Он создан, чтобы избежать конфликтов имен в XML.
  • Чтобы избежать конфликтов имен другими способами, нам нужно предоставить каждому элементу префикс.
  • чтобы избежать повторного использования префикса в каждом теге xml, мы используем xmlns в корне xml. Следовательно, у нас есть тег xmlns: android = ” http://schemas.android.com/apk/res/android
  • Теперь андроид просто означает, что мы присваиваем ему пространство имен « http://schemas.android.com/apk/res/android ».
  • Это пространство имен - это не URL, а URI, также известный как URN (универсальное имя ресурса), который редко используется вместо URI.
  • В связи с этим Android будет нести ответственность за идентификацию связанных элементов Android в документе XML, который будет Android: XXXXXXX и т. Д. Без этого пространства имен Android: XXXXXX не будет распознан.

Чтобы положить в термин непрофессионала:

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


2

В XML имена элементов определяются разработчиком. Это часто приводит к конфликту при попытке смешать документы XML из разных приложений XML. Пользователь или приложение XML не будут знать, как справиться с этими различиями. Конфликты имен в XML можно легко избежать, используя префикс имени. При использовании префиксов в XML необходимо определить пространство имен для префикса. Пространство имен может быть определено атрибутом xmlns в начальном теге элемента. Объявление пространства имен имеет следующий синтаксис. XMLNS: префикс = "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-разработчиком 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.


пожалуйста, уточните это подробнее
Прамод С. Никам
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.