Mengapa baris ini xmlns: android = “http://schemas.android.com/apk/res/android” harus menjadi yang pertama di file layout xml?

156

Mengapa baris ini diperlukan dalam file layout xml?

xmlns:android="http://schemas.android.com/apk/res/android" 
Hitesh Dhamshaniya
sumber
Tidak perlu berada di baris pertama?
Aada

Jawaban:

118

Dalam XML, xmlns mendeklarasikan Namespace. Bahkan, ketika Anda melakukannya:

<LinearLayout android:id>
</LinearLayout>

Alih-alih memanggil android:id, xml akan menggunakan http://schemas.android.com/apk/res/android:id untuk menjadi unik. Secara umum halaman ini tidak ada (itu adalah URI, bukan URL), tetapi terkadang itu adalah URL yang menjelaskan namespace yang digunakan.

Namespace memiliki kegunaan yang hampir sama dengan nama paket dalam aplikasi Java.

Berikut ini penjelasannya.

Uniform Resource Identifier (URI)

Uniform Resource Identifier (URI) adalah serangkaian karakter yang mengidentifikasi Sumber Daya Internet.

URI yang paling umum adalah Uniform Resource Locator (URL) yang mengidentifikasi alamat domain Internet. Jenis lain, yang tidak terlalu umum dari URI adalah Nama Sumber Daya Universal (URN).

Dalam contoh kami, kami hanya akan menggunakan URL.

NitroG42
sumber
13
Lalu mengapa kita memiliki android:layout_widthbukan hanya layout_width?
Shashwat
4
Lalu bagaimana kita menggunakan "LinearLayout" dan bukannya "android: LinearLayout"?
pengembang android
Mungkin karena LinearLayout adalah bagian dari root namespace, dan atribut android: xxx adalah bagian dari subnamespace (" schemas.android.com/apk/res/android/android/id" )
NitroG42
4
Tentu saja itu tidak mengambil url ini, ini adalah URI: w3schools.com/xml/xml_namespaces.asp
NitroG42
1
Dari danielmiessler.com/study/url_vs_uri : "URL adalah jenis URI. Jadi, jika seseorang memberi tahu Anda bahwa URL bukan URI, ia salah. Tapi itu tidak berarti semua URI adalah URL. Semua kupu-kupu terbang, tetapi bukan semua yang terbang adalah kupu-kupu. Bagian yang membuat URL URI adalah penyertaan “mekanisme akses”, atau “lokasi jaringan”, mis. http: /, ftp: //, ldap: //, telnet: / /, dll.
yonivav
37

Untuk memahami mengapa xmlns:android=“http://schemas.android.com/apk/res/android”harus menjadi yang pertama dalam tata letak file xml. Kita harus memahami komponen menggunakan contoh

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>

Uniform Resource Indicator (URI) :

  • Dalam komputasi, pengidentifikasi sumber daya seragam (URI) adalah serangkaian karakter yang digunakan untuk mengidentifikasi nama sumber daya.
  • Identifikasi tersebut memungkinkan interaksi dengan representasi sumber daya melalui jaringan, biasanya World Wide Web, menggunakan protokol khusus.

Mis: http://schemas.android.com/apk/res/android:idapakah URI di sini


Namespace XML :

  • Ruang nama XML digunakan untuk menyediakan elemen dan atribut yang dinamai secara unik dalam dokumen XML. xmlns:androidmenggambarkan namespace android.
  • Ini digunakan seperti ini karena ini adalah pilihan desain oleh google untuk menangani kesalahan pada waktu kompilasi.
  • Juga seandainya kita menulis sendiri textview widget dengan fitur berbeda dibandingkan dengan android textview, android namespace membantu membedakan antara textviewwidget khusus kita dan textviewwidget android
Setan
sumber
8
jawaban ini sangat layak dibaca dibandingkan dengan yang di atas yang tidak jelas menjelaskan "MENGAPA?"
eRaisedToX
Anda mengatakan seperti, "Identifikasi tersebut memungkinkan interaksi dengan representasi sumber daya melalui jaringan, biasanya World Wide Web, menggunakan protokol spesifik. Contoh: schemas.android.com/apk/res/android:id adalah URI di sini" - Tetapi jika saya tidak memiliki koneksi internet, Bagaimana ruang nama android ini akan berinteraksi dengan sumber daya melalui jaringan?
kavie
29

xmlns merujuk ke namespace XML

Saat menggunakan awalan dalam XML, ruang nama yang disebut untuk awalan harus ditentukan. Namespace ditentukan oleh atribut xmlns di tag awal elemen. Deklarasi namespace memiliki sintaks berikut. xmlns: prefix = "URI".

Catatan : URI namespace tidak digunakan oleh parser untuk mencari informasi.

Tujuannya adalah untuk memberikan namespace nama yang unik. Namun, seringkali perusahaan menggunakan namespace sebagai penunjuk ke halaman web yang berisi informasi namespace.

Martyn
sumber
7

Ini hanya deklarasi Ruang Nama XML. Kami menggunakan Ruang Nama ini untuk menentukan bahwa atribut yang tercantum di bawah, milik Android. Jadi mereka mulai dengan " android: "

Anda sebenarnya dapat membuat atribut khusus Anda sendiri. Jadi untuk mencegah konflik nama di mana 2 atribut dinamai hal yang sama, tetapi berperilaku berbeda, kami menambahkan awalan " android: " untuk menandakan bahwa ini adalah atribut Android.

Dengan demikian, deklarasi Space Name ini harus dimasukkan dalam tag pembuka dari tampilan root file XML Anda.

Harsh Dani
sumber
Sederhana dan jelas. Saya tidak tahu tentang jawaban lain tetapi jawaban Anda bekerja seperti magnet bagi kebingungan saya dan konsep saya jelas sekarang.
Stack Overflow
3
  • Xmlns berarti namespace xml.
  • Itu dibuat untuk menghindari konflik penamaan di xml.
  • Untuk menghindari penamaan konflik dengan cara lain, kami perlu memberikan setiap elemen awalan.
  • untuk menghindari penggunaan awalan berulang di setiap tag xml, kami menggunakan xmlns pada akar xml. Karenanya kami memiliki tag xmlns: android = ” http://schemas.android.com/apk/res/android
  • Sekarang android di sini berarti kita menugaskan namespace " http://schemas.android.com/apk/res/android " untuknya.
  • Namespace ini bukan URL tetapi URI juga dikenal sebagai URN (nama sumber daya universal) yang jarang digunakan sebagai pengganti URI.
  • Karena android ini akan bertanggung jawab untuk mengidentifikasi elemen-elemen terkait android dalam dokumen xml yang akan android: xxxxxxx dll. Tanpa ini namespace android: xxxxxxx tidak akan dikenali.

Untuk memasukkan istilah awam:

tanpa xmlns: android = ” http://schemas.android.com/apk/res/android ” tag terkait android tidak akan dikenali dalam dokumen xml tata letak kami.

Swapnil
sumber
2

Dalam XML, nama elemen ditentukan oleh pengembang. Ini sering mengakibatkan konflik ketika mencoba untuk menggabungkan dokumen XML dari aplikasi XML yang berbeda. Pengguna atau aplikasi XML tidak akan tahu bagaimana menangani perbedaan-perbedaan ini. Konflik nama dalam XML dapat dengan mudah dihindari menggunakan awalan nama. Saat menggunakan awalan dalam XML, namespace untuk awalan harus ditentukan. Namespace dapat didefinisikan oleh atribut xmlns di tag awal elemen. Deklarasi namespace memiliki sintaks berikut. xmlns: prefix = "URI".

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

Ini adalah bentuk xmlns: android = "@ + / id". Sekarang untuk merujuknya kita gunakan misalnya

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

Xmlns lain adalah

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

yang dalam bentuk xmlns: app = "@ + / id" dan penggunaannya diberikan di bawah ini

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

Saya pikir itu menjadi jelas dengan namespace, karena kita dapat membuat atribut kita sendiri dan jika atribut yang ditentukan pengguna sama dengan yang ada di Android, itu menghindari konflik namespace.

Ungu
sumber
2

xmlns: android Ini adalah tag awal untuk menentukan namespace android di Android. Ini adalah konvensi standar yang ditentukan oleh pengembang google android. ketika Anda menggunakan dan tata letak default atau custome, maka harus menggunakan namespace ini.

Menentukan ruang nama Android. Atribut ini harus selalu disetel ke " http://schemas.android.com/apk/res/android ".

Dari <manifes>dokumentasi elemen .

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

xmlns : adalah ruang nama xml dan URL: " http://schemas.android.com/apk/res/android " tidak lain adalah

XSD yang merupakan [definisi skema XML]: yang digunakan menentukan aturan untuk file XML.

Contoh:

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

Biarkan saya jelaskan Aturan Seperti Apa? .

  1. Dalam file XML di atas kita sudah mendefinisikan layout_width untuk tata letak kita sekarang JIKA Anda akan mendefinisikan atribut yang sama kedua kali Anda akan mendapatkan kesalahan.
  2. EditText ada tetapi jika Anda ingin menambahkan EditText lain tidak ada masalah.

Jenis Aturan semacam itu didefinisikan dalam XML XSD: " http://schemas.android.com/apk/res/android "

sedikit terlambat tapi saya harap ini membantu Anda.

Rashid Kalhoro
sumber
0

Ini adalah deklarasi ruang nama XML untuk menentukan bahwa atribut yang ada dalam grup tampilan yang mengalami perlambatan terkait dengan android.

jeff
sumber
tolong jelaskan lebih lanjut
Pramod S. Nikam