frequenti problemi che sorgono in visualizzazione Android, errore durante l'analisi XML: prefisso non associato


296

Ho problema frequente in vista 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>

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

Una breve nota, se dimentichi il commento supress ALL nella prima riga, non noterai nemmeno che c'è qualcosa di sbagliato nel tuo layout (come questo: <? Xml version = "1.0" encoding = "utf-8"? > <! - sopprimere TUTTO ->)
Mike,

Risposte:


555

Un paio di ragioni per cui ciò può accadere:

1) Questo errore viene visualizzato con uno spazio dei nomi errato o un refuso nell'attributo. Come 'xmlns' è sbagliato, dovrebbe esserexmlns:android

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

3) Se stai integrando AdMob, controlla parametri personalizzati come ads:adSize, ti servono

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

4) Se stai usando LinearLayoutpotresti dover definire degli strumenti:

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


Cosa intendi con "il primo nodo"? Nella domanda originale è che TextView?
David Doria,

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

Grazie mille, ho risolto il mio problema nel caso 3 aggiungendo questa riga xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 per la risposta
Shylendra Madda

101

Ho intenzione di aggiungere una risposta separata solo perché non la vedo qui. Pentium10 non ha richiesto il 100%, ma sono finito qui cercandoError parsing XML: unbound prefix

Risulta che stavo usando parametri personalizzati per annunci AdMob come ads:adSize, ma non avevo aggiunto

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

al layout. Una volta aggiunto, ha funzionato alla grande.


63

Ho avuto lo stesso problema.

Assicurati che il prefisso (android: [qualunque cosa]) sia scritto e scritto correttamente. Nel caso della linea, xmlns:android="http://schemas.android.com/apk/res/android" assicurati di avere il prefisso completo xmlns:androide che sia scritto correttamente. Lo stesso con tutti gli altri prefissi: assicurati che siano scritti correttamente e abbiano 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!
IgorGanapolsky,

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

32

Come accennato, è necessario specificare lo spazio dei nomi giusto . 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 funzionerà.

Modificare:

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

per

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

Il messaggio di errore si riferisce a tutto ciò che inizia "android:" poiché l'XML non sa quale sia lo " android:" spazio dei nomi.

xmlns:android lo definisce.


23

Questo errore può verificarsi nel caso in cui si utilizzi un prefisso non definito 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>

Il compilatore Android non sa cos'è XYZ poiché non è stato ancora definito.

Nel tuo caso, dovresti aggiungere di seguito definire al nodo principale del file xml.

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


2
Questo è stato per me. Era un malinteso mistype: Invece di android: layout_weight avevo digitato anrdoid: layout_weigth.
Yahel,

Nguyen, come definire XYZ? Grazie
Anatoliy Shuba il

10

errore prefisso non associato per l'indicatore ViewPager:

Insieme ai seguenti tag di intestazione in parentLayout:

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

Aggiungi anche:

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

Questo ha fatto il trucco per me.


9

Per me, ho ricevuto l'errore "prefisso non associato" sulla prima riga qui, anche se avevo scritto erroneamente 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 ho scoperto che la soluzione era aggiungere Android: strumenti al primo nodo. Nel mio caso è 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">

Sì, se fai riferimento a strumenti, ma non aggiungi lo spazio dei nomi per gli strumenti, otterrai anche questo.
Dr. Ferrol Blackmon,

3

Aggiungerò un po 'di più per i neofiti e per le persone, come me, che non capiscono l'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. Pertanto sono necessari i seguenti spazi dei nomi o la build genera sangue (ovvero Errore nell'analisi di XML: prefisso non associato) che viene tradotto in: È stato utilizzato uno spazio dei nomi, ma non è stato definito.

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

3

OK, ci sono molte soluzioni qui, ma in realtà non spiegano la causa principale del problema, quindi eccoci qui:

quando vedi un attributo come android:layout_width="match_parent"la androidparte è il prefisso, il formato per un attributo qui è PREFIX:NAME="VALUE". in XML, spazi dei nomi e prefissi sono modi per evitare conflitti di denominazione, ad esempio possiamo avere due attributi distinti con lo stesso nome ma prefissi diversi come: a:a="val"e b:a="val".

per usare prefissi come androido appo qualsiasi altro devi definire uno spazio dei nomi usando l' xmlnsattributo.

quindi se hai questo problema trova solo i prefissi che non hanno uno spazio dei nomi definito, se tools:...hai dovresti aggiungere lo spazio dei nomi degli strumenti come suggerito da alcune risposte, se hai l' app:...attributo dovresti aggiungere xmlns:app="http://schemas.android.com/apk/res-auto"all'elemento radice

Ulteriori letture:

Spiegazione semplice degli spazi dei nomi XML

Spazi dei nomi XML in W3


2

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

per me è stato ..

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

che mi mancava 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

Nel mio caso l'errore non è stato causato da nessuno dei problemi di spazio dei nomi XML sopra indicati. Invece era la posizione android:iddell'attributo - doveva essere il primo elemento nella dichiarazione dell'elemento particolare.

Così questo:

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

... necessario leggere in questo modo:

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

1

Oltre a tutto ciò, esiste anche uno scenario in cui si verifica questo errore-

Quando tu o il tuo progetto di libreria definite l'attributo personalizzato int attr.xml, utilizzate questi attributi nel vostro file di layout senza definire lo spazio dei nomi.

Generalmente usiamo questa definizione di spazio dei nomi nell'intestazione del nostro file di layout.

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

Quindi assicurati che tutti gli attributi nel tuo file debbano iniziare con

android:ATTRIBUTE-NAME

Devi identificare se alcuni dei tuoi attirbute non iniziano con qualcosa di diverso da Android: ATTRIBUTE-NAME come

temp:ATTRIBUTE-NAME

In questo caso hai questa "temp" anche come spazio dei nomi, generalmente includendo-

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

1

Devi solo aggiungere lo spazio dei nomi corretto nel tag radice. xmlns: android = "http://schemas.android.com/apk/res/android" Gli elemet Android sono dichiarati in questo spazio dei nomi. Lo stesso vale per l'importazione della classe o del pacchetto.


0

Di solito mi capita quando scrivo erroneamente Android - scrivo semplicemente andorid o simili, e non è ovvio a prima vista soprattutto dopo molte ore di programmazione, quindi faccio solo una ricerca per "android" uno per uno e vedo se la ricerca salta uno tag - se lo fa, allora ho uno sguardo da vicino e vedo dove era refuso.


0

Ho ricevuto questo errore in Xamarin mentre stavo usando

  <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 un file di layout senza installare il pacchetto nuget per android.support.v7.widget.CardView

L'installazione del pacchetto nuget applicabile ha risolto il problema. Spero che sia d'aiuto, non ho visto questa risposta da nessuna parte nell'elenco

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.