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


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.


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

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.


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.


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.


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


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"

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.


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 .


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.


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.


proszę rozwinąć to bardziej
Pramod S. Nikam
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.