częste problemy pojawiające się w widoku Androida, Błąd parsowania XML: niezwiązany prefiks

296

Mam częsty problem w android widzenia 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
źródło
9
Sprawdź wszystkie zamieszczone odpowiedzi; wszystkie są ważne. Problemem są przestrzenie nazw XML i kilka sposobów, które mogą pójść bardzo źle.
whitey04
Szybka uwaga, jeśli zapomnisz o pomijaniu WSZYSTKIEGO komentarza w pierwszym wierszu, nawet nie zauważysz, że coś jest nie tak z twoim układem (na przykład: <? Xml version = "1.0" encoding = "utf-8"? > <! - pomiń WSZYSTKO ->)
Mike

Odpowiedzi:

555

Kilka powodów, dla których może się to zdarzyć:

1) Ten błąd występuje z niepoprawną przestrzenią nazw lub literówką w atrybucie. Tak jak „xmlns” jest zły, tak powinno byćxmlns:android

2) Pierwszy węzeł musi zawierać: xmlns:android="http://schemas.android.com/apk/res/android"

3) Jeśli integrujesz AdMob, sprawdź parametry niestandardowe, takie jak ads:adSizepotrzebujesz

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

4) Jeśli używasz LinearLayout, może być konieczne zdefiniowanie narzędzi:

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

Pentium10
źródło
Co rozumiesz przez „pierwszy węzeł”? W pierwotnym pytaniu jest to, że TextView?
David Doria,
1
... aw nowym Google Play AdMob jest to: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160
Bardzo dziękuję, rozwiązałem swój problem w przypadku 3, dodając ten wiersz xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 za odpowiedź
Shylendra Madda
101

Dodam osobną odpowiedź tylko dlatego, że jej tu nie widzę. To nie jest 100%, o co prosił Pentium10, ale skończyłem tutaj, szukającError parsing XML: unbound prefix

Okazało się, że użyłem niestandardowych parametrów dla reklam AdMob ads:adSize, ale nie dodałem

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

do układu. Gdy go dodałem, działało świetnie.

MalcolmOcean
źródło
63

Miałem ten sam problem.

Upewnij się, że przedrostek (android: [cokolwiek]) jest napisany poprawnie i poprawnie napisany. W przypadku linii xmlns:android="http://schemas.android.com/apk/res/android" upewnij się, że masz pełny prefiks xmlns:androidi że jest on poprawnie napisany. To samo z innymi prefiksami - upewnij się, że są poprawnie napisane i mają android:[name]. To rozwiązało mój problem.

Daniel
źródło
1
Tak, w moim przypadku błąd został spowodowany przez androi: src = "@ drawable / half" - co było wyraźnie błędne!
IgorGanapolsky
Tak, miałem ten sam problem. Brakowało mi również części „xmln:”.
user1032613
32

Jak wspomniałeś, musisz określić właściwą przestrzeń nazw . Ten błąd występuje również w niepoprawnej przestrzeni nazw.

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

nie będzie działać.

Zmiana:

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

do

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

Komunikat o błędzie odnosi się do wszystkiego, co uruchamia „android:”, ponieważ XML nie wie, czym android:jest przestrzeń nazw „ ”.

xmlns:android określa to.

VonC
źródło
23

Ten błąd może wystąpić w przypadku użycia niezdefiniowanego prefiksu, takiego jak:

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

Kompilator Androida nie wie, co to jest XYZ, ponieważ nie został jeszcze zdefiniowany.

W twoim przypadku powinieneś dodać poniżej zdefiniować do węzła głównego pliku xml.

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

Nguyen Minh Binh
źródło
2
Ten zrobił to dla mnie. To był kiepski błąd: zamiast Androida: layout_weight wpisałem anrdoid: layout_weigth.
Yahel,
Nguyen, jak zdefiniować XYZ? Dzięki
Anatoliy Shuba,
10

niezwiązany błąd prefiksu dla wskaźnika ViewPager:

Wraz z następującymi tagami nagłówka w swoim ParentLayout:

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

Dodaj także:

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

To załatwiło sprawę.

amalBit
źródło
9

Dla mnie w pierwszej linii pojawił się błąd „prefiks niezwiązany”, chociaż w czwartej linii miałem niepoprawną pisownię.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
anrdoid:fillViewport="true"
>
flobacca
źródło
7

Miałem ten sam problem i stwierdziłem, że rozwiązaniem było dodanie narzędzi android: do pierwszego węzła. W moim przypadku jest to 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
źródło
Tak, jeśli odwołujesz się do narzędzi, ale nie dodajesz przestrzeni nazw dla narzędzi, również to otrzymasz.
Dr Ferrol Blackmon
3

Wrzucę trochę więcej dla początkujących i dla ludzi, takich jak ja, którzy nie rozumieją XML.

Odpowiedzi powyżej są całkiem dobre, ale ogólna odpowiedź jest taka, że ​​potrzebujesz przestrzeni nazw dla dowolnej przestrzeni nazw użytej w pliku config.xml.

Tłumaczenie: Każda nazwa znacznika XML, która ma znacznik z przestrzenią nazw, gdzie bla jest przestrzenią nazw, a fubar jest znacznikiem XML. Przestrzeń nazw pozwala używać wielu różnych narzędzi do interpretacji XML z własnymi nazwami znaczników. Na przykład Intel XDK używa przestrzeni nazw intelxdk, a Android używa Androida. Potrzebne są zatem następujące przestrzenie nazw lub kompilacja wyrzuca krew (tj. Błąd podczas analizowania XML: niezwiązany prefiks), który jest tłumaczony na: Użyłeś przestrzeni nazw, ale jej nie zdefiniowałeś.

  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:intelxdk="http://xdk.intel.com/ns/v1"
turbogeek
źródło
3

OK, istnieje wiele rozwiązań, ale tak naprawdę nie wyjaśniają głównej przyczyny problemu, więc zaczynamy:

kiedy widzisz atrybutem jak android:layout_width="match_parent"w androidczęści jest przedrostek, format atrybutu tu jest PREFIX:NAME="VALUE". w XML przestrzenie nazw i prefiksy to sposoby na uniknięcie konfliktów nazw, na przykład możemy mieć dwa różne atrybuty o tej samej nazwie, ale różne prefiksy, takie jak: a:a="val"i b:a="val".

aby używać prefiksów takich jak androidlub appinnych, należy zdefiniować przestrzeń nazw za pomocą xmlnsatrybutu.

więc jeśli masz ten problem, po prostu znajdź prefiksy, które nie mają zdefiniowanej przestrzeni nazw, jeśli tak tools:..., powinieneś dodać przestrzeń nazw narzędzi, jak sugerują niektóre odpowiedzi, jeśli masz app:...atrybut, powinieneś dodać xmlns:app="http://schemas.android.com/apk/res-auto"element główny

Dalsza lektura:

Proste wyjaśnienie przestrzeni nazw XML

Przestrzenie nazw XML w W3

mohas
źródło
2

Ten błąd zwykle występuje, jeśli nie podałeś xmlns:mmpoprawnie, występuje zwykle w pierwszym wierszu kodu.

dla mnie to było ..

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

które przeoczyłem w pierwszym wierszu kodu

<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
źródło
1

W moim przypadku błąd nie był spowodowany żadnym z powyższych problemów z przestrzenią nazw xml. Zamiast tego była to lokalizacja android:idatrybutu - musiał to być pierwszy element w deklaracji konkretnego elementu.

Więc to:

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

... musiał przeczytać w ten sposób:

<TextView android:id="@+id/bottomtext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:singleLine="true" />
okredo
źródło
1

Poza tym istnieje również scenariusz, w którym występuje ten błąd -

Kiedy Ty lub Twój projekt biblioteczny definiujesz niestandardowy atrybut int attr.xml, i używasz tych atrybutów w pliku układu bez definiowania przestrzeni nazw.

Zasadniczo używamy tej definicji przestrzeni nazw w nagłówku naszego pliku układu.

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

Następnie upewnij się, że wszystkie atrybuty w twoim pliku powinny zaczynać się od

android:ATTRIBUTE-NAME

Musisz ustalić, czy niektóre z twoich attirbute nie zaczynają się od czegoś innego niż Android: ATTRIBUTE-NAME jak

temp:ATTRIBUTE-NAME

W tym przypadku masz tę „temp” również jako przestrzeń nazw, na ogół poprzez włączenie-

xmlns:temp="http://schemas.android.com/apk/res-auto"
Anuj Garg
źródło
1

Musisz tylko dodać odpowiednią przestrzeń nazw do znacznika głównego. xmlns: android = "http://schemas.android.com/apk/res/android" ELEMETY Android są zadeklarowane w tej przestrzeni nazw. To samo co import klasy lub pakietu.

Gevaria Purva
źródło
0

Zwykle zdarza mi się, gdy źle wpisuję Androida - po prostu wpisuję andorid lub podobnie, i na pierwszy rzut oka nie jest to oczywiste, szczególnie po wielu godzinach programowania, więc po prostu szukam „Androida” jeden po drugim i sprawdzam, czy wyszukiwanie pomija jeden tag - jeśli tak, to przyglądam się uważnie i widzę literówkę.

Nenad Bulatovic
źródło
0

Wystąpił ten błąd w Xamarin, gdy używałem

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

w pliku układu bez instalowania pakietu nuget dla android.support.v7.widget.CardView

Zainstalowanie odpowiedniego pakietu nuget rozwiązało problem. Mam nadzieję, że to pomaga, nie widziałem tej odpowiedzi nigdzie na liście

sześciokąt
źródło