2010-02-08 7 views
258

Ho problema frequente in vista Android, Error parsing XML: unbound prefix on Line 2.problemi frequenti sorgono in vista Android, Error parsing XML: prefisso non legata

<?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> 
+6

Controllare tutte le risposte pubblicate per questo; sono tutti validi. Il problema sono gli spazi dei nomi XML e diversi modi in cui può andare terribilmente storto. – whitey04

+0

Una breve nota, se si dimentica la soppressione TUTTI i commenti nella prima riga, non si noterà nemmeno che c'è qualcosa di sbagliato nel proprio layout (come questo: ) – Mike

risposta

499

Un paio di ragioni per cui questo può accadere:

1) Si vede questo errore con uno spazio dei nomi non corretto o un errore di battitura nel attributo. Come 'xmlns' è sbagliato, dovrebbe essere xmlns:android

2) Primo nodo deve contenere: xmlns:android="http://schemas.android.com/apk/res/android"

3) Se si integra AdMob controllo i parametri personalizzati come gli annunci: adSize, è necessario

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

4) Se si sta utilizzando LinerLayout potrebbe essere definire strumenti

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

+0

Cosa intendi per "il primo nodo"? Nella domanda originale è che il TextView? –

+1

no, LinearLayout è il primo nodo –

+1

... e nel nuovo Google Play AdMob è: xmlns: ads = "http://schemas.android.com/apk/res-auto" – user1010160

26

Come si parla, è necessario specificare il right namespace. Si vede anche questo errore con uno spazio dei nomi errato.

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

non funziona.

Cambio:

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

a

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

Il messaggio di errore si riferisce a tutto ciò che inizia "android:" come XML non lo sa cos'è lo spazio dei nomi "android:" .

xmlns:android definisce.

56

Ho avuto questo stesso problema.

Assicurarsi che il prefisso (android: [qualunque sia]) sia stato digitato correttamente e scritto correttamente. Nel caso della linea xmlns:android="http://schemas.android.com/apk/res/android" assicurarsi di avere il pieno prefisso xmlns:android e che sia stato digitato correttamente. Stessa cosa con tutti gli altri prefissi - assicurarsi che siano state digitate correttamente e hanno android:[name]. Questo è ciò che ha risolto il mio problema.

+1

Sì, nel mio caso l'errore è stato causato da androi: src = "@ drawable/half" - che era chiaramente sbagliato! –

+0

Sì, ho avuto lo stesso problema. Mi mancava anche la parte "xmln:". – user1032613

22

Questo errore può si verifica nel caso in cui si utilizza il prefisso non-definita come:

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

Android compilatore non sa che cosa è XYZ in quanto non è stato ancora definito.

Nel tuo caso, devi aggiungere sotto definire per nodo root del file xml.

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

+2

Questo lo ha fatto per me. Era un vile errore: invece di androide: layout_weight avevo digitato anrdoid: layout_weigth. – Yahel

+0

Nguyen, come definire XYZ? Grazie –

+1

@AnatoliyShuba, come questo - xmlns: XYZ = "http://schemas.android.com/apk/res-auto" – radu122

1

Nel mio caso l'errore non è stato causato da uno dei problemi xml namespace di cui sopra. Invece era la posizione dell'attributo android:id - doveva essere il primo elemento nella dichiarazione dell'elemento particolare.

Quindi questo:

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

... necessario per leggere in questo modo:

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

Questo è strano, l'ordine degli attributi in un singolo elemento non dovrebbe importare ... – WOUNDEDStevenJones

8

Per quanto mi riguarda, ho ottenuto l'errore "non legato prefisso" sulla prima linea qui, anche se avevo scritto male Android sulla quarta riga.

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

Ho avuto lo stesso problema, e ha scoperto che la soluzione era quella di aggiungere l'androide: strumenti al primo nodo. Nel mio caso si tratta di un 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"> 
+0

Sì, se si consultano gli strumenti, ma non si aggiunge lo spazio dei nomi per gli strumenti, si otterrà anche questo. –

98

ho intenzione di aggiungere una risposta separata solo perché non vedo qui. Non è al 100% ciò che Pentium10 chiesto, ma ho finito qui la ricerca di Error parsing XML: unbound prefix

venuto fuori che stavo usando parametri personalizzati per gli annunci AdMob come ads:adSize, ma non aveva aggiunto

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

al disposizione. Una volta che l'ho aggiunto, ha funzionato alla grande.

10

errore prefisso nessun impegno per ViewPager Indicatore:

Insieme con i seguenti tag di intestazione nel parentLayout:

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

anche aggiungere:

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

Questo ha fatto il trucco per me.

2

Questo errore si verifica in genere se non è stato incluso correttamente xmlns:mm, si verifica in genere nella prima riga di codice.

per me è stato ..

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

che ho perso nella prima riga del codice

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

Accanto a tutto questo, c'è anche uno scenario in cui questo errore occures-

quando voi o il vostro progetto di libreria definire personalizzato attributo int attr .xml, e usi questi attributi nel tuo file di layout senza definire lo spazio dei nomi.

In genere utilizziamo questa definizione dello spazio dei nomi nell'intestazione del nostro file di layout.

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

Quindi assicurarsi che tutti gli attributi nel file shoud iniziano con

android:ATTRIBUTE-NAME 

È necessario identfy se alcuni dei vostri attirbute non parte con qualcosa di diverso Android: nome_attributo come

temp:ATTRIBUTE-NAME 

In questo caso si dispone di questo "temp" anche come spazio dei nomi, in genere da tra cui-

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

Mi capita di solito quando eseguo errori di ortografia su Android - digito semplicemente andorid o simili, e non è evidente a prima vista, specialmente dopo molte ore di programmazione, quindi faccio una ricerca per "android" uno per uno e vedo se la ricerca salta un tag, se lo fa, guardo attentamente e vedo dove era l'errore di battitura.

3

Getterò un po 'di più per i neofiti e per gente, come me, che non capisce XML.

Le risposte sopra sono piuttosto buone, ma la risposta generale è che è necessario uno spazio dei nomi per qualsiasi spazio dei nomi utilizzato nel file config.xml.

Traduzione: qualsiasi nome di tag XML che ha è un tag con uno spazio dei nomi in cui blah è lo spazio dei nomi e fubar è il tag XML. Lo spazio dei nomi consente di utilizzare molti strumenti diversi per interpretare l'XML con i propri nomi di tag. Ad esempio, Intel XDK utilizza lo spazio dei nomi intelxdk e Android utilizza Android. Quindi avete bisogno dei seguenti namespace o build up blood (cioè errore di parsing XML: prefisso non associato) che è tradotto in: avete usato uno spazio dei nomi, ma non lo avete definito.

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

È sufficiente aggiungere uno spazio nome appropriato nel tag radice. xmlns: android = "http://schemas.android.com/apk/res/android" Gli elemets Android sono dichiarati in questo spazio nome. Ha lo stesso significato della classe o del pacchetto di importazione.