Häufige Probleme in der Android-Ansicht, Fehler beim Parsen von XML: ungebundenes Präfix

296

Ich habe häufige Probleme in der Android-Ansicht 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
quelle
9
Überprüfen Sie alle Antworten, die dazu veröffentlicht wurden. Sie sind alle gültig. Das Problem sind XML-Namespaces und verschiedene Möglichkeiten, wie es schrecklich schief gehen kann.
whitey04
Ein kurzer Hinweis: Wenn Sie den Kommentar "ALLE unterdrücken" in Ihrer ersten Zeile vergessen, werden Sie nicht einmal bemerken, dass etwas mit Ihrem Layout nicht stimmt (wie folgt: <? Xml version = "1.0" encoding = "utf-8"? > <! - ALLE unterdrücken ->)
Mike

Antworten:

555

Einige Gründe, warum dies passieren kann:

1) Sie sehen diesen Fehler mit einem falschen Namespace oder einem Tippfehler im Attribut. Wie 'xmlns' falsch ist, sollte es seinxmlns:android

2) Der erste Knoten muss enthalten: xmlns:android="http://schemas.android.com/apk/res/android"

3) Wenn Sie AdMob integrieren, überprüfen ads:adSizeSie die von Ihnen benötigten benutzerdefinierten Parameter

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

4) Wenn Sie verwenden, müssen LinearLayoutSie möglicherweise Werkzeuge definieren:

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

Pentium10
quelle
Was meinst du mit "dem ersten Knoten"? In der ursprünglichen Frage ist das die TextView?
David Doria
1
... und im neuen Google Play AdMob ist es: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160
Vielen Dank, ich habe mein Problem in Fall 3 gelöst, indem ich diese Zeile xmlns hinzugefügt habe: ads = " schemas.android.com/apk/lib/com.google.ads " +1 für die Antwort
Shylendra Madda
101

Ich werde eine separate Antwort hinzufügen, nur weil ich sie hier nicht sehe. Es ist nicht 100% das, wonach Pentium10 gefragt hat, aber ich bin hier gelandet, indem ich gesucht habeError parsing XML: unbound prefix

Es stellte sich heraus, dass ich benutzerdefinierte Parameter für AdMob-Anzeigen wie verwendet habe ads:adSize, diese jedoch nicht hinzugefügt habe

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

zum Layout. Sobald ich es hinzugefügt habe, hat es großartig funktioniert.

MalcolmOcean
quelle
63

Ich hatte das gleiche Problem.

Stellen Sie sicher, dass das Präfix (android: [was auch immer]) richtig geschrieben und richtig geschrieben ist. Stellen Sie im Fall der Zeile xmlns:android="http://schemas.android.com/apk/res/android" sicher, dass Sie das vollständige Präfix haben xmlns:androidund dass es richtig geschrieben ist. Gleiches gilt für alle anderen Präfixe - stellen Sie sicher, dass sie richtig geschrieben sind und haben android:[name]. Dies hat mein Problem gelöst.

Daniel
quelle
1
Ja, in meinem Fall wurde der Fehler von androi verursacht: src = "@ drawable / half" - was eindeutig falsch war!
Igor Ganapolsky
Ja, ich hatte das gleiche Problem. Mir fehlte auch der Teil "xmln:".
user1032613
32

Wie Sie bereits erwähnt haben, müssen Sie den richtigen Namespace angeben . Sie sehen diesen Fehler auch mit einem falschen Namespace.

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

wird nicht funktionieren.

Veränderung:

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

zu

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

Die Fehlermeldung bezieht sich auf alles, was "android:" startet, da das XML nicht weiß, was der " android:" Namespace ist.

xmlns:android definiert es.

VonC
quelle
23

Dieser Fehler kann auftreten, wenn Sie ein nicht definiertes Präfix verwenden, z.

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

Der Android-Compiler weiß nicht, was XYZ ist, da es noch nicht definiert wurde.

In Ihrem Fall sollten Sie unten den Stammknoten der XML-Datei definieren.

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

Nguyen Minh Binh
quelle
2
Dieser hat es für mich getan. Es war ein lahmer Fehler: Anstelle von android: layout_weight hatte ich anrdoid: layout_weigth eingegeben.
Yahel
Nguyen, wie definiere ich XYZ? Vielen Dank
Anatoliy Shuba
10

ungebundener Präfixfehler für ViewPager-Indikator:

Zusammen mit den folgenden Header-Tags in Ihrem parentLayout:

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

Fügen Sie außerdem hinzu:

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

Das hat den Trick für mich getan.

amalBit
quelle
9

Für mich habe ich hier in der ersten Zeile den Fehler "ungebundenes Präfix" erhalten, obwohl ich in der vierten Zeile Android falsch geschrieben hatte.

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

Ich hatte das gleiche Problem und stellte fest, dass die Lösung darin bestand, die android: tools zum ersten Knoten hinzuzufügen. In meinem Fall handelt es sich um ein 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
quelle
Ja, wenn Sie auf Tools verweisen, aber den Namespace für Tools nicht hinzufügen, erhalten Sie dies ebenfalls.
Dr. Ferrol Blackmon
3

Ich werde ein bisschen mehr für die Neulinge und für Leute wie mich tun, die XML nicht verstehen.

Die obigen Antworten sind ziemlich gut, aber die allgemeine Antwort lautet, dass Sie für jeden in der Datei config.xml verwendeten Namespace einen Namespace benötigen.

Übersetzung: Jeder XML-Tag-Name ist ein Tag mit einem Namespace, wobei blah der Namespace und fubar das XML-Tag ist. Mit dem Namespace können Sie viele verschiedene Tools verwenden, um das XML mit eigenen Tag-Namen zu interpretieren. Beispielsweise verwendet Intel XDK den Namespace intelxdk und Android verwendet Android. Daher benötigen Sie die folgenden Namespaces, oder der Build wirft Blut auf (dh Fehler beim Parsen von XML: ungebundenes Präfix), das übersetzt wird in: Sie haben einen Namespace verwendet, ihn aber nicht definiert.

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

OK, hier gibt es viele Lösungen, aber nicht die eigentliche Ursache des Problems erklären, also los geht's:

Wenn Sie sehen, dass ein Attribut wie android:layout_width="match_parent"das androidTeil das Präfix ist, lautet das Format für ein Attribut hier PREFIX:NAME="VALUE". In XML sind Namespaces und Präfixe Möglichkeiten, um Namenskonflikte zu vermeiden. Beispielsweise können wir zwei unterschiedliche Attribute mit demselben Namen, aber unterschiedlichen Präfixen wie: a:a="val"und haben b:a="val".

Um Präfixe wie androidoder appandere zu verwenden, sollten Sie einen Namespace mithilfe eines xmlnsAttributs definieren.

also , wenn Sie dieses Problem haben nur Präfixe finden, die nicht über ein Namensraum definiert haben, wenn Sie haben tools:...Sie Werkzeuge Namensraum hinzufügen sollten , da einige answeres vorgeschlagen, wenn Sie app:...Attribut sollten Sie hinzufügen , xmlns:app="http://schemas.android.com/apk/res-auto"um das Wurzelelement

Weiterführende Literatur:

Einfache Erklärung der XML-Namespaces

XML-Namespaces in W3

Mohas
quelle
2

Dieser Fehler tritt normalerweise auf, wenn Sie den nicht xmlns:mmrichtig aufgenommen haben. Er tritt normalerweise in der ersten Codezeile auf.

für mich war es ..

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

dass ich in der ersten Zeile des Codes verpasst habe

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

In meinem Fall wurde der Fehler nicht durch eines der oben genannten Probleme mit dem XML-Namespace verursacht. Stattdessen war es die Position des android:idAttributs - es musste das erste Element in der Deklaration des jeweiligen Elements sein.

Also das:

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

... musste so lesen:

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

Daneben gibt es auch ein Szenario, in dem dieser Fehler auftritt.

Wenn Sie oder Ihr Bibliotheksprojekt ein benutzerdefiniertes Attribut in der Datei attr.xml definieren und diese Attribute in Ihrer Layoutdatei verwenden, ohne den Namespace zu definieren.

Im Allgemeinen verwenden wir diese Namespace-Definition im Header unserer Layoutdatei.

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

Stellen Sie dann sicher, dass alle Attribute in Ihrer Datei mit beginnen

android:ATTRIBUTE-NAME

Sie müssen sich identifizieren, wenn ein Teil Ihrer Attirbute nicht mit etwas anderem als Android beginnt: ATTRIBUTE-NAME like

temp:ATTRIBUTE-NAME

In diesem Fall haben Sie diese "Temperatur" auch als Namespace, in der Regel durch Einschließen von-

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

Sie müssen nur den richtigen Namensraum in Ihr Root-Tag einfügen. xmlns: android = "http://schemas.android.com/apk/res/android" Android-Elemente werden in diesem Namensraum deklariert. Dies entspricht dem Importieren von Klassen oder Paketen.

Gevaria Purva
quelle
0

Es passiert mir normalerweise, wenn ich Android falsch schreibe - ich tippe nur andorid oder ähnlich, und es ist auf den ersten Blick nicht offensichtlich, besonders nach vielen Stunden Programmieren, also mache ich einfach eine Suche nach "android" nacheinander und sehe, ob die Suche eine überspringt tag - wenn ja, dann schaue ich genau hin und sehe, wo Tippfehler waren.

Nenad Bulatovic
quelle
0

Ich habe diesen Fehler in Xamarin erhalten, als ich verwendet habe

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

in einer Layoutdatei ohne Installation des Nuget-Pakets für android.support.v7.widget.CardView

Durch die Installation des entsprechenden Nuget-Pakets wurde das Problem behoben. Hoffe es hilft, ich habe diese Antwort nirgendwo in der Liste gesehen

Hexagod
quelle