masalah yang sering muncul pada tampilan android, Kesalahan parsing XML: awalan tidak terikat

296

Saya sering mengalami masalah dalam tampilan android Error parsing XML: unbound prefix on Line 2,.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:orientation="vertical" android:id="@+id/myScrollLayout" 
android:layout_width="fill_parent"  android:layout_height="wrap_content">
    <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" 
    android:text="Family" android:id="@+id/Family" 
    android:textSize="16px" android:padding="5px" 
    android:textStyle="bold" android:gravity="center_horizontal">
    </TextView>

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="vertical" android:scrollbars="vertical">
        <LinearLayout android:orientation="vertical" android:id="@+id/myMainLayout" 
        android:layout_width="fill_parent"  android:layout_height="wrap_content">
        </LinearLayout>
    </ScrollView>

</LinearLayout>
Pentium10
sumber
9
Periksa semua jawaban yang diposting untuk ini; semuanya valid. Masalahnya adalah ruang nama XML dan beberapa cara bisa salah.
whitey04
Catatan singkat, jika Anda lupa komentar SEMUA penekan di baris pertama Anda, Anda bahkan tidak akan melihat ada sesuatu yang salah dengan tata letak Anda (seperti ini: <? Xml version = "1.0" encoding = "utf-8"? > <! - tekan SEMUA ->)
Mike

Jawaban:

555

Beberapa alasan mengapa hal ini dapat terjadi:

1) Anda melihat kesalahan ini dengan namespace yang salah, atau salah ketik pada atribut. Seperti 'xmlns' salah, seharusnyaxmlns:android

2) Node pertama harus berisi: xmlns:android="http://schemas.android.com/apk/res/android"

3) Jika Anda mengintegrasikan AdMob, periksa parameter khusus seperti ads:adSize, yang Anda butuhkan

xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

4) Jika Anda menggunakan LinearLayoutAnda mungkin harus mendefinisikan alat:

xmlns:tools="http://schemas.android.com/tools"

Pentium10
sumber
Apa yang Anda maksud dengan "simpul pertama"? Dalam pertanyaan aslinya, apakah itu TextView?
David Doria
1
... dan di Google Play AdMob yang baru: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160
Terima kasih banyak, saya memecahkan masalah saya dalam kasus 3 dengan menambahkan baris ini xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 untuk jawabannya
Shylendra Madda
101

Saya akan menambahkan jawaban terpisah hanya karena saya tidak melihatnya di sini. Ini bukan 100% apa yang diminta Pentium10, tapi saya berakhir di sini dengan mencariError parsing XML: unbound prefix

Ternyata saya menggunakan parameter khusus untuk iklan AdMob ads:adSize, tetapi saya belum menambahkan

    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"

ke tata letak. Setelah saya menambahkannya, itu bekerja dengan baik.

MalcolmOcean
sumber
63

Saya punya masalah yang sama.

Pastikan bahwa awalan (android: [apa pun]) dieja dengan benar dan ditulis dengan benar. Dalam kasus garis xmlns:android="http://schemas.android.com/apk/res/android" pastikan bahwa Anda memiliki awalan penuh xmlns:androiddan dieja dengan benar. Sama dengan awalan lainnya - pastikan sudah dieja dengan benar dan miliki android:[name]. Inilah yang memecahkan masalah saya.

Daniel
sumber
1
Ya, dalam kasus saya kesalahan ini disebabkan oleh androi: src = "@ drawable / half" - yang jelas salah!
IgorGanapolsky
Ya, saya punya masalah yang sama. Saya juga melewatkan bagian "xmln:".
user1032613
32

Seperti yang Anda sebutkan, Anda perlu menentukan namespace yang tepat . Anda juga melihat kesalahan ini dengan namespace yang salah.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:padding="10dip">

tidak akan berfungsi.

Perubahan:

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

untuk

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

Pesan kesalahan merujuk ke segala sesuatu yang dimulai "android:" karena XML tidak tahu apa android:namespace itu.

xmlns:android mendefinisikannya.

VONC
sumber
23

Kesalahan ini dapat terjadi jika Anda menggunakan awalan yang tidak ditentukan seperti:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TabHost
    XYZ:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >


</TabHost>

Kompiler Android tidak tahu apa itu XYZ karena belum ditentukan.

Dalam kasus Anda, Anda harus menambahkan define di bawah ini ke root node dari file xml.

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

Nguyen Minh Binh
sumber
2
Yang ini melakukannya untuk saya. Itu adalah mistype lumpuh: Alih-alih android: layout_weight saya telah mengetik anrdoid: layout_weigth.
Yahel
Nguyen, bagaimana cara mendefinisikan XYZ? Terima kasih
Anatoliy Shuba
10

kesalahan awalan tak terikat untuk Indikator ViewPager:

Seiring dengan tag tajuk berikut di parentLayout Anda:

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

Juga tambahkan:

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

Ini berhasil bagi saya.

amalBit
sumber
9

Bagi saya, saya mendapat kesalahan "awalan tak terikat" di baris pertama di sini, meskipun saya salah eja android di baris keempat.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
anrdoid:fillViewport="true"
>
flobacca
sumber
7

Saya memiliki masalah yang sama, dan menemukan bahwa solusinya adalah menambahkan android: alat ke simpul pertama. Dalam kasus saya ini adalah LineraLayout:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">
Sebastian Breit
sumber
Ya, jika Anda merujuk alat, tetapi jangan menambahkan namespace untuk alat, Anda akan mendapatkan ini juga.
Dr. Ferrol Blackmon
3

Saya akan memberikan sedikit lebih banyak untuk pemula dan untuk orang-orang, seperti saya, yang tidak mengerti XML.

Jawaban di atas cukup bagus, tetapi jawaban umumnya adalah Anda memerlukan namespace untuk setiap namespace yang digunakan dalam file config.xml.

Terjemahan: Setiap nama tag XML yang memiliki adalah tag dengan namespace di mana bla adalah namespace dan fubar adalah tag XML. Namespace memungkinkan Anda menggunakan banyak alat yang berbeda untuk menafsirkan XML dengan nama tag mereka sendiri. Misalnya, Intel XDK menggunakan namespace intelxdk dan android menggunakan android. Dengan demikian Anda memerlukan namespace berikut atau build yang memuntahkan darah (mis. Kesalahan parsing XML: awalan tidak terikat) yang diterjemahkan ke: Anda menggunakan namespace, tetapi tidak mendefinisikannya.

  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:intelxdk="http://xdk.intel.com/ns/v1"
turbogeek
sumber
3

OK, ada banyak solusi di sini tetapi tidak benar-benar menjelaskan akar penyebab masalah jadi di sini kita mulai:

ketika Anda melihat atribut seperti android:layout_width="match_parent"yang androidbagian adalah awalan, format untuk atribut di sini adalah PREFIX:NAME="VALUE". dalam XML, ruang nama dan awalan adalah cara untuk menghindari konflik penamaan misalnya kita dapat memiliki dua atribut berbeda dengan nama yang sama tetapi awalan yang berbeda seperti: a:a="val"dan b:a="val".

untuk menggunakan awalan seperti androidatau applainnya, Anda harus mendefinisikan namespace menggunakan xmlnsatribut.

jadi jika Anda memiliki masalah ini, temukan saja awalan yang tidak memiliki namespace yang ditentukan, jika Anda memiliki tools:...Anda harus menambahkan alat namespace seperti beberapa jawaban yang disarankan, jika Anda memiliki app:...atribut Anda harus menambahkan xmlns:app="http://schemas.android.com/apk/res-auto"ke elemen root

Bacaan lebih lanjut:

XML Namespaces penjelasan sederhana

Ruang nama XML di W3

mohas
sumber
2

Kesalahan ini biasanya terjadi jika Anda belum memasukkan dengan xmlns:mmbenar, itu terjadi biasanya di baris pertama kode.

bagi saya itu ..

xmlns: mm = "http://millennialmedia.com/android/schema"

yang saya lewatkan di baris pertama kode

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mm="http://millennialmedia.com/android/schema"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginTop="50dp"
android:layout_marginBottom="50dp"
android:background="@android:color/transparent" >
Kailas
sumber
1

Dalam kasus saya kesalahan ini tidak disebabkan oleh masalah namespace xml di atas. Alih-alih itu adalah lokasi android:idatribut - itu harus menjadi item pertama dalam deklarasi elemen tertentu.

Jadi ini:

<TextView android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:id="@+id/bottomtext" 
      android:singleLine="true" />

... perlu dibaca seperti ini:

<TextView android:id="@+id/bottomtext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:singleLine="true" />
okredo
sumber
1

Selain semua ini, ada juga skenario di mana kesalahan ini terjadi-

Ketika Anda atau proyek perpustakaan Anda mendefinisikan atribut kustom int attr.xml, Dan Anda menggunakan atribut ini dalam file tata letak Anda tanpa mendefinisikan namespace.

Secara umum kami menggunakan definisi namespace ini di header file layout kami.

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

Kemudian pastikan semua atribut dalam file Anda mulai dengan

android:ATTRIBUTE-NAME

Anda perlu mengidentifikasi jika beberapa attirbute Anda tidak memulai dengan sesuatu selain android: ATTRIBUTE-NAME seperti

temp:ATTRIBUTE-NAME

Dalam hal ini Anda memiliki "temp" ini juga sebagai namespace, umumnya dengan menyertakan-

xmlns:temp="http://schemas.android.com/apk/res-auto"
Anuj Garg
sumber
1

Anda hanya perlu menambahkan ruang nama yang tepat di tag root Anda. xmlns: android = "http://schemas.android.com/apk/res/android" Elemet Android dideklarasikan dalam ruang nama ini. Sama dengan mengimpor kelas atau paket.

Gevaria Purva
sumber
0

Ini biasanya terjadi pada saya ketika saya salah mengeja android - Saya hanya mengetik andorid atau sejenisnya, dan itu tidak jelas pada pandangan pertama terutama setelah berjam-jam pemrograman, jadi saya hanya melakukan pencarian "android" satu per satu dan melihat apakah pencarian melompati satu tag - jika tidak maka saya melihat dari dekat dan saya melihat di mana kesalahan ketik.

Nenad Bulatovic
sumber
0

Saya mendapatkan kesalahan ini di Xamarin ketika saya menggunakan

  <android.support.v7.widget.CardView  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    card_view:cardElevation="4dp"  
    card_view:cardCornerRadius="5dp"  
    card_view:cardUseCompatPadding="true">  
  </android.support.v7.widget.CardView>

dalam file layout tanpa menginstal paket nuget untuk android.support.v7.widget.CardView

Menginstal paket nuget yang berlaku memperbaiki masalah tersebut. Semoga ini bisa membantu, saya tidak melihat jawaban ini di mana pun dalam daftar

hexagod
sumber