Dlaczego ta linia xmlns: android = „http://schemas.android.com/apk/res/android” musi być pierwszą w pliku xml układu?

156

Dlaczego ta linia jest potrzebna w pliku układu XML?

xmlns:android="http://schemas.android.com/apk/res/android" 
Hitesh Dhamshaniya
źródło
Nie musi znajdować się w pierwszej linii?
Aada

Odpowiedzi:

118

W XML xmlns deklaruje przestrzeń nazw. W rzeczywistości, kiedy:

<LinearLayout android:id>
</LinearLayout>

Zamiast dzwonić android:id, XML użyje http://schemas.android.com/apk/res/android:id, aby być unikalnym. Zwykle ta strona nie istnieje (jest to identyfikator URI, a nie adres URL), ale czasami jest to adres URL wyjaśniający używaną przestrzeń nazw.

Przestrzeń nazw ma prawie takie same zastosowania, jak nazwa pakietu w aplikacji Java.

Oto wyjaśnienie.

Jednolity identyfikator zasobów (URI)

Uniform Resource Identifier (URI) to ciąg znaków identyfikujący zasób internetowy.

Najpopularniejszym identyfikatorem URI jest Uniform Resource Locator (URL), który identyfikuje adres domeny internetowej. Innym, niezbyt popularnym typem identyfikatora URI jest uniwersalna nazwa zasobu (URN).

W naszych przykładach będziemy używać tylko adresów URL.

NitroG42
źródło
13
Więc dlaczego mamy android:layout_widthzamiast po prostu layout_width?
Shashwat
4
Dlaczego więc używamy „LinearLayout” zamiast „android: LinearLayout”?
programista Androida
Prawdopodobnie dlatego, że LinearLayout są częścią głównej przestrzeni nazw, a atrybuty android: xxx są częścią przestrzeni podrzędnej („ schemas.android.com/apk/res/android/android/id” )
NitroG42
4
Oczywiście nie pobiera tego adresu
NitroG42.
1
Od danielmiessler.com/study/url_vs_uri : „URL to typ URI. Więc jeśli ktoś mówi Ci, że URL nie jest URI, to się myli. Ale to nie znaczy, że wszystkie URI są adresami URL. Wszystkie motyle latają, ale nie wszystko, co leci, jest motylem. Częścią, która sprawia, że ​​URI jest URL, jest włączenie „mechanizmu dostępu” lub „lokalizacji sieciowej”, np. http: /, ftp: //, ldap: //, telnet: / / itp.
yonivav
37

Aby zrozumieć, dlaczego xmlns:android=“http://schemas.android.com/apk/res/android”musi być pierwszym w pliku xml układu Rozumiemy komponenty na przykładzie

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>

Jednolity wskaźnik zasobów (URI) :

  • W informatyce jednolity identyfikator zasobu (URI) to ciąg znaków używany do identyfikacji nazwy zasobu.
  • Taka identyfikacja umożliwia interakcję z reprezentacjami zasobu w sieci, zazwyczaj w sieci WWW, przy użyciu określonych protokołów.

Np .: http://schemas.android.com/apk/res/android:idto identyfikator URI


Przestrzeń nazw XML :

  • Przestrzenie nazw XML służą do dostarczania unikatowych nazw elementów i atrybutów w dokumencie XML. xmlns:androidopisuje przestrzeń nazw systemu Android.
  • Jest używany w ten sposób, ponieważ jest to wybór projektu przez Google do obsługi błędów w czasie kompilacji.
  • Przypuszczam też napisać własny textviewwidget z różnych funkcji w porównaniu do android textview, android nazw pomaga odróżnić nasz zwyczaj textviewwidget i android textviewwidget
Devrath
źródło
8
ta odpowiedź jest naprawdę warta przeczytania w porównaniu z powyższymi, które nie wyjaśniły jasno „DLACZEGO?”
eRaisedToX
Mówiłeś w stylu: „Taka identyfikacja umożliwia interakcję z reprezentacjami zasobu w sieci, zazwyczaj w sieci WWW, przy użyciu określonych protokołów. Np .: schemas.android.com/apk/res/android:id to identyfikator URI” - Ale jeśli nie mam połączenia z Internetem, w jaki sposób ta przestrzeń nazw Androida będzie współdziałać z zasobami w sieci?
kavie
29

xmlns odnosi się do przestrzeni nazw XML

Korzystając z przedrostków w XML, należy zdefiniować tzw. Przestrzeń nazw dla prefiksu. Przestrzeń nazw jest definiowana przez atrybut xmlns w początkowym znaczniku elementu. Deklaracja przestrzeni nazw ma następującą składnię. xmlns: prefix = "URI".

Uwaga : identyfikator URI przestrzeni nazw nie jest używany przez parser do wyszukiwania informacji.

Celem jest nadanie przestrzeni nazw unikalnej nazwy. Jednak często firmy używają przestrzeni nazw jako wskaźnika do strony internetowej zawierającej informacje o przestrzeni nazw.

Martyn
źródło
7

To jest tylko deklaracja przestrzeni nazw XML. Używamy tej przestrzeni nazw, aby określić, że wymienione poniżej atrybuty należą do systemu Android. Dlatego zaczynają się od „ android:

W rzeczywistości możesz tworzyć własne atrybuty niestandardowe. Aby zapobiec konfliktom nazw, w których dwa atrybuty mają takie same nazwy, ale zachowują się inaczej, dodajemy przedrostek „ android: ”, aby zaznaczyć, że są to atrybuty systemu Android.

Dlatego ta deklaracja przestrzeni nazw musi być zawarta w otwierającym tagu widoku głównego pliku XML.

Harsh Dani
źródło
Proste i przejrzyste. Nie znam innych odpowiedzi, ale twoja odpowiedź działa jak magnes na moje zmieszanie i moja koncepcja jest teraz jasna.
Przepełnienie stosu
3
  • Xmlns oznacza przestrzeń nazw xml.
  • Jest tworzony, aby uniknąć konfliktów nazw w plikach xml.
  • Aby uniknąć konfliktów nazw w inny sposób, musimy każdemu elementowi nadać prefiks.
  • aby uniknąć wielokrotnego używania prefiksu w każdym tagu xml, używamy xmlns w katalogu głównym xml. Stąd mamy tag xmlns: android = ” http://schemas.android.com/apk/res/android
  • Teraz android oznacza po prostu, że przypisujemy do niego przestrzeń nazw „ http://schemas.android.com/apk/res/android ”.
  • Ta przestrzeń nazw nie jest adresem URL, ale identyfikatorem URI znanym również jako URN (uniwersalna nazwa zasobu), który jest rzadko używany zamiast identyfikatora URI.
  • Z tego powodu android będzie odpowiedzialny za zidentyfikowanie elementów związanych z androidem w dokumencie xml, które byłyby android: xxxxxxx itp. Bez tej przestrzeni nazw android: xxxxxxx nie zostanie rozpoznany.

Ujmując termin laika:

bez xmlns: android = ” http://schemas.android.com/apk/res/android ” tagi związane z Androidem nie będą rozpoznawane w dokumencie xml naszego układu.

Swapnil
źródło
2

W XML nazwy elementów są definiowane przez programistę. Często powoduje to konflikt podczas próby mieszania dokumentów XML z różnych aplikacji XML. Użytkownik lub aplikacja XML nie będzie wiedzieć, jak radzić sobie z tymi różnicami. Konfliktów nazw w XML można łatwo uniknąć, używając przedrostka nazwy. Używając przedrostków w XML, należy zdefiniować przestrzeń nazw dla prefiksu. Przestrzeń nazw może być zdefiniowana przez atrybut xmlns w znaczniku początkowym elementu. Deklaracja przestrzeni nazw ma następującą składnię. xmlns: prefix = "URI".

student
źródło
2
xmlns:android="http://schemas.android.com/apk/res/android"

To jest forma xmlns: android = "@ + / id". Teraz, aby to odnieść, używamy na przykład

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

Innym xmlns jest

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

który ma postać xmlns: app = "@ + / id" i jego użycie jest podane poniżej

 app:layout_constraintBottom_toBottomOf="parent"
 app:layout_constraintLeft_toLeftOf="parent"
Saleem Kalro
źródło
2

Myślę, że jest to jasne dzięki przestrzeni nazw, ponieważ możemy tworzyć własne atrybuty, a jeśli atrybut określony przez użytkownika jest taki sam jak ten w systemie Android, unikamy konfliktu przestrzeni nazw.

Liliowy
źródło
2

xmlns: android To jest tag początkowy do definiowania przestrzeni nazw systemu Android w systemie Android. Jest to standardowa konwencja zdefiniowana przez programistę Google dla Androida. gdy używasz domyślnego układu lub niestandardowego układu, musisz użyć tej przestrzeni nazw.

Definiuje przestrzeń nazw systemu Android. Ten atrybut powinien zawsze mieć wartość „ http://schemas.android.com/apk/res/android ”.

Z <manifes>dokumentacji elementu .

vikseln
źródło
1
xmlns:android="http://schemas.android.com/apk/res/android" 

xmlns : to przestrzeń nazw xml, a adres URL:http://schemas.android.com/apk/res/android ” to nic innego jak

XSD, czyli [definicja schematu XML]: który jest używany do definiowania reguł dla pliku XML.

Przykład:

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

Pozwól, że wyjaśnię, jakie zasady? .

  1. W powyższym pliku XML zdefiniowaliśmy już layout_width dla naszego układu teraz, JEŚLI zdefiniujesz ten sam atrybut za drugim razem, pojawi się błąd.
  2. EditText jest dostępny, ale jeśli chcesz dodać kolejny EditText, nie ma problemu.

Tego rodzaju reguły są zdefiniowane w XML XSD: „ http://schemas.android.com/apk/res/android

trochę późno, ale mam nadzieję, że to ci pomoże.

Rashid Kalhoro
źródło
0

Jest to deklaracja przestrzeni nazw XML w celu określenia, że ​​atrybuty znajdujące się w grupie widoków, w której następuje spowolnienie, są powiązane z systemem Android.

jeff
źródło
proszę rozwinąć to bardziej
Pramod S. Nikam