problemas frecuentes que surgen en la vista de Android, Error al analizar XML: prefijo independiente

296

Tengo un problema frecuente en vista androide, 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
fuente
99
Verifique todas las respuestas publicadas para esto; Todos son válidos. El problema son los espacios de nombres XML y varias formas en que puede salir terriblemente mal.
whitey04
Una nota rápida, si olvida el comentario de suprimir TODO en su primera línea, ni siquiera notará que algo está mal con su diseño (como esto: <? Xml version = "1.0" encoding = "utf-8"? > <! - suprimir TODOS ->)
Mike

Respuestas:

555

Un par de razones por las que esto puede suceder:

1) Verá este error con un espacio de nombres incorrecto o un error tipográfico en el atributo. Como 'xmlns' está mal, debería serxmlns:android

2) El primer nodo debe contener: xmlns:android="http://schemas.android.com/apk/res/android"

3) Si está integrando AdMob, verifique parámetros personalizados como ads:adSize, necesita

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

4) Si está utilizando LinearLayoutpuede que tenga que definir herramientas:

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

Pentium10
fuente
¿Qué quieres decir con "el primer nodo"? En la pregunta original es que el TextView?
David Doria
1
... y en el nuevo Google Play AdMob es: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160
Muchas gracias, resolví mi problema en el caso 3 agregando esta línea xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 por la respuesta
Shylendra Madda
101

Voy a agregar una respuesta por separado solo porque no la veo aquí. No es 100% lo que pidió Pentium10, pero terminé aquí buscandoError parsing XML: unbound prefix

Resulta que estaba usando parámetros personalizados para anuncios de AdMob como ads:adSize, pero no había agregado

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

al diseño. Una vez que lo agregué funcionó muy bien.

MalcolmOcean
fuente
63

Yo tuve el mísmo problema.

Asegúrese de que el prefijo (android: [lo que sea]) esté escrito y escrito correctamente. En el caso de la línea, xmlns:android="http://schemas.android.com/apk/res/android" asegúrese de tener el prefijo completo xmlns:androidy de que esté escrito correctamente. Lo mismo con cualquier otro prefijo: asegúrese de que esté escrito correctamente y tenga android:[name]. Esto es lo que resolvió mi problema.

Daniel
fuente
1
Sí, en mi caso, el error fue causado por androi: src = "@ drawable / half", ¡lo cual era claramente incorrecto!
IgorGanapolsky
Sí, tuve el mismo problema. Me faltaba la parte "xmln:" también.
user1032613
32

Como mencionas, debes especificar el espacio de nombres correcto . También ve este error con un espacio de nombres incorrecto.

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

no trabajará.

Cambio:

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

a

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

El mensaje de error se refiere a todo lo que comienza "android:" ya que el XML no sabe cuál es el " android:" espacio de nombres.

xmlns:android lo define

VonC
fuente
23

Este error puede ocurrir en el caso de que use un prefijo no definido como:

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

El compilador de Android no sabe qué es XYZ ya que aún no se definió.

En su caso, debe agregar a continuación definir al nodo raíz del archivo xml.

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

Nguyen Minh Binh
fuente
2
Este lo hizo por mí. Era un tipo incorrecto: en lugar de android: layout_weight, escribí anrdoid: layout_weigth.
Yahel
Nguyen, ¿cómo definir XYZ? Gracias
Anatoliy Shuba
10

error de prefijo independiente para el indicador ViewPager:

Junto con las siguientes etiquetas de encabezado en su parentLayout:

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

También agregue:

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

Esto hizo el truco para mí.

amalBit
fuente
9

Para mí, recibí el error "prefijo independiente" en la primera línea aquí, aunque había escrito mal Android en la cuarta línea.

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

Tuve el mismo problema y descubrí que la solución era agregar las herramientas android: al primer nodo. En mi caso es 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">
Sebastian Breit
fuente
Sí, si hace referencia a herramientas, pero no agrega el espacio de nombres para las herramientas, también obtendrá esto.
Dr. Ferrol Blackmon
3

Echaré un poco más para los novatos y para las personas, como yo, que no entienden XML.

Las respuestas anteriores son bastante buenas, pero la respuesta general es que necesita un espacio de nombres para cualquier espacio de nombres utilizado en el archivo config.xml.

Traducción: cualquier nombre de etiqueta XML que tenga es una etiqueta con un espacio de nombres donde blah es el espacio de nombres y fubar es la etiqueta XML. El espacio de nombres le permite usar muchas herramientas diferentes para interpretar el XML con sus propios nombres de etiquetas. Por ejemplo, Intel XDK usa el espacio de nombres intelxdk y android usa android. Por lo tanto, necesita los siguientes espacios de nombres o la compilación arroja sangre (es decir, Error al analizar XML: prefijo independiente) que se traduce en: Usó un espacio de nombres, pero no lo definió.

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

OK, hay muchas soluciones aquí, pero en realidad no explican la causa raíz del problema, así que aquí vamos:

cuando vea un atributo como android:layout_width="match_parent"la androidparte es el prefijo, el formato para un atributo aquí es PREFIX:NAME="VALUE". en XML, los espacios de nombres y los prefijos son formas de evitar conflictos de nombres, por ejemplo, podemos tener dos atributos distintos con el mismo nombre pero con prefijos diferentes como:a:a="val" yb:a="val" .

para usar prefijos como androido appcualquier otro, debe definir un espacio de nombres usandoxmlns atributo.

así que si tiene este problema, simplemente busque prefijos que no tengan un espacio de nombres definido, si lo tiene tools:..., debe agregar el espacio de nombres de las herramientas como sugieren algunos respondedores, si tiene un app:...atributo, debe agregarxmlns:app="http://schemas.android.com/apk/res-auto" al elemento raíz

Otras lecturas:

Explicación simple de espacios de nombres XML

Espacios de nombres XML en W3

mohas
fuente
2

Este error generalmente ocurre si no lo ha incluido xmlns:mmcorrectamente, generalmente ocurre en la primera línea de código.

para mi fue ..

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

que me perdí en la primera línea del código

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

En mi caso, el error no fue causado por ninguno de los problemas de espacio de nombres xml anteriores. En cambio, era la ubicación delandroid:id atributo: tenía que ser el primer elemento en la declaración del elemento en particular.

Así que esto:

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

... necesitaba leer así:

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

Además de todo esto, también hay un escenario en el que se produce este error.

Cuando usted o su proyecto de biblioteca definen un atributo personalizado int attr.xml, y utiliza estos atributos en su archivo de diseño sin definir el espacio de nombres.

Generalmente usamos esta definición de espacio de nombres en el encabezado de nuestro archivo de diseño.

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

Luego, asegúrese de que todos los atributos en su archivo deben comenzar con

android:ATTRIBUTE-NAME

Debe identificar si parte de su attirbute no está comenzando con algo que no sea android: ATTRIBUTE-NAME como

temp:ATTRIBUTE-NAME

En este caso, tiene este "temp" también como espacio de nombres, generalmente incluyendo-

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

Solo necesita agregar el espacio de nombre apropiado en su etiqueta raíz. xmlns: android = "http://schemas.android.com/apk/res/android" Los elementos Android se declaran en este espacio de nombre. Es lo mismo que importar la clase o el paquete.

Gevaria Purva
fuente
0

Por lo general, me sucede cuando escribo mal Android: simplemente escribo andorid o similar, y no es obvio a primera vista, especialmente después de muchas horas de programación, así que solo busco "android" uno por uno y veo si la búsqueda omite uno etiqueta: si es así, lo miro de cerca y veo dónde estaba el error tipográfico.

Nenad Bulatovic
fuente
0

Recibí este error en Xamarin cuando estaba 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>

en un archivo de diseño sin instalar el paquete nuget para android.support.v7.widget.CardView

La instalación del paquete nuget aplicable solucionó el problema. Espero que ayude, no vi esta respuesta en ninguna parte de la lista

hexagod
fuente