problèmes fréquents survenant dans la vue Android, erreur d'analyse XML: préfixe non lié

297

J'ai problème fréquent en vue 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>
Pentium10
la source
9
Vérifiez toutes les réponses affichées pour cela; ils sont tous valables. Le problème est les espaces de noms XML et plusieurs façons dont il peut mal tourner.
whitey04
Une note rapide, si vous oubliez le commentaire SUPPRIMER TOUS dans votre toute première ligne, vous ne remarquerez même pas que quelque chose ne va pas avec votre mise en page (comme ceci: <? Xml version = "1.0" encoding = "utf-8"? > <! - supprimer TOUT ->)
Mike

Réponses:

555

Quelques raisons pour lesquelles cela peut se produire:

1) Vous voyez cette erreur avec un espace de noms incorrect ou une faute de frappe dans l'attribut. Comme «xmlns» est faux, il devrait êtrexmlns:android

2) Le premier nœud doit contenir: xmlns:android="http://schemas.android.com/apk/res/android"

3) Si vous intégrez AdMob, vérifiez les paramètres personnalisés comme ads:adSize, vous avez besoin

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

4) Si vous utilisez, LinearLayoutvous devrez peut-être définir des outils:

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

Pentium10
la source
Qu'entendez-vous par "le premier nœud"? Dans la question d'origine est-ce que le TextView?
David Doria
1
... et dans le nouveau Google Play AdMob c'est: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160
Merci beaucoup, j'ai résolu mon problème dans le cas 3 en ajoutant cette ligne xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 pour la réponse
Shylendra Madda
101

Je vais ajouter une réponse séparée simplement parce que je ne la vois pas ici. Ce n'est pas à 100% ce que Pentium10 a demandé, mais je me suis retrouvé ici en cherchantError parsing XML: unbound prefix

Il s'avère que j'utilisais des paramètres personnalisés pour les annonces AdMob comme ads:adSize , mais je n'avais pas ajouté

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

à la mise en page. Une fois que je l'ai ajouté, cela a très bien fonctionné.

MalcolmOcean
la source
63

J'ai eu le même problème.

Assurez-vous que le préfixe (android: [n'importe quoi]) est correctement orthographié et écrit correctement. Dans le cas de la ligne, xmlns:android="http://schemas.android.com/apk/res/android" assurez-vous que vous avez le préfixe complet xmlns:androidet qu'il est correctement orthographié. Même chose avec tous les autres préfixes - assurez-vous qu'ils sont correctement orthographiés et ont android:[name]. C'est ce qui a résolu mon problème.

Daniel
la source
1
Oui, dans mon cas, l'erreur a été causée par androi: src = "@ drawable / half" - ce qui était clairement faux!
IgorGanapolsky
Oui, j'ai eu le même problème. Il me manquait également la partie "xmln:".
user1032613
32

Comme vous le mentionnez, vous devez spécifier le bon espace de noms . Vous voyez également cette erreur avec un espace de noms incorrect.

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

ne fonctionnera pas.

Changement:

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

à

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

Le message d'erreur fait référence à tout ce qui démarre "android:" car le XML ne sait pas ce qu'est " android:" l'espace de noms.

xmlns:android le définit.

VonC
la source
23

Cette erreur peut se produire dans le cas où vous utilisez un préfixe non défini tel que:

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

Le compilateur Android ne sait pas ce qu'est XYZ car il n'a pas encore été défini.

Dans votre cas, vous devez ajouter ci-dessous définir au nœud racine du fichier xml.

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

Nguyen Minh Binh
la source
2
Celui-ci l'a fait pour moi. C'était un type erroné: Au lieu d'Android: layout_weight, j'avais tapé anrdoid: layout_weigth.
Yahel
Nguyen, comment définir XYZ? Merci
Anatoliy Shuba
10

erreur de préfixe non lié pour l' indicateur ViewPager:

Avec les balises d'en-tête suivantes dans votre parentLayout:

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

Ajoutez également:

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

Cela a fait l'affaire pour moi.

amalBit
la source
9

Pour moi, j'ai eu l'erreur "préfixe non lié" sur la première ligne ici, bien que j'aie mal orthographié Android sur la quatrième ligne.

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

J'ai eu le même problème et j'ai trouvé que la solution était d'ajouter les outils android: au premier nœud. Dans mon cas, c'est 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
la source
Oui, si vous faites référence à des outils, mais n'ajoutez pas l'espace de noms pour les outils, vous obtiendrez également cela.
Dr.Ferrol Blackmon
3

Je vais en ajouter un peu plus pour les débutants et pour les gens, comme moi, qui ne comprennent pas XML.

Les réponses ci-dessus sont plutôt bonnes, mais la réponse générale est que vous avez besoin d'un espace de noms pour tout espace de noms utilisé dans le fichier config.xml.

Traduction: Tout nom de balise XML qui a est une balise avec un espace de noms où blah est l'espace de noms et fubar est la balise XML. L'espace de noms vous permet d'utiliser de nombreux outils différents pour interpréter le XML avec leurs propres noms de balise. Par exemple, Intel XDK utilise l'espace de noms intelxdk et android utilise android. Ainsi, vous avez besoin des espaces de noms suivants ou la génération génère du sang (c.-à-d. Erreur lors de l'analyse XML: préfixe non lié) qui se traduit par: Vous avez utilisé un espace de noms, mais ne l'avez pas défini.

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

OK, il y a beaucoup de solutions ici mais n'expliquent pas réellement la cause première du problème alors allons-y:

lorsque vous voyez un attribut comme android:layout_width="match_parent"la androidpièce est le préfixe, le format d'un attribut est ici PREFIX:NAME="VALUE". en XML, les espaces de noms et les préfixes sont des moyens d'éviter les conflits de nommage par exemple, nous pouvons avoir deux attributs distincts avec le même nom mais des préfixes différents comme: a:a="val"et b:a="val".

pour utiliser des préfixes comme androidou appou tout autre, vous devez définir un espace de noms à l'aide d'un xmlnsattribut.

donc si vous avez ce problème, il suffit de trouver des préfixes qui n'ont pas d'espace de nom défini, si vous en avez, tools:...vous devez ajouter un espace de noms d'outils comme le suggèrent certaines réponses, si vous avez un app:...attribut, vous devez l'ajouter xmlns:app="http://schemas.android.com/apk/res-auto"à l'élément racine

Lectures complémentaires:

Explication simple des espaces de noms XML

Espaces de noms XML dans W3

mohas
la source
2

Cette erreur se produit généralement si vous n'avez pas inclus xmlns:mmcorrectement, elle se produit généralement dans la première ligne de code.

pour moi c'était ..

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

que j'ai raté en première ligne du code

<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
la source
1

Dans mon cas, l'erreur n'a été causée par aucun des problèmes d'espace de noms xml ci-dessus. Au lieu de cela, c'était l'emplacement de l' android:idattribut - il devait être le premier élément de la déclaration de l'élément particulier.

Donc ça:

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

... besoin de lire comme ceci:

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

À côté de tout cela, il y a aussi un scénario où cette erreur se produit -

Lorsque vous ou votre projet de bibliothèque définissez l'attribut personnalisé int attr.xml, et que vous utilisez ces attributs dans votre fichier de disposition sans définir d'espace de noms.

Généralement, nous utilisons cette définition d'espace de noms dans l'en-tête de notre fichier de mise en page.

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

Assurez-vous ensuite que tous les attributs de votre fichier commencent par

android:ATTRIBUTE-NAME

Vous devez vous identifier si certains de vos attirbute ne commencent pas par autre chose que Android: ATTRIBUTE-NAME comme

temp:ATTRIBUTE-NAME

Dans ce cas, vous avez également ce "temp" comme espace de noms, généralement en incluant-

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

Vous avez juste besoin d'ajouter un espace de nom approprié dans votre balise racine. xmlns: android = "http://schemas.android.com/apk/res/android" Les elemets Android sont déclarés dans cet espace de noms. Cela équivaut à l'importation d'une classe ou d'un package.

Gevaria Purva
la source
0

Cela m'arrive généralement lorsque j'orthographe mal Android - je tape simplement andorid ou similaire, et ce n'est pas évident à première vue, surtout après de nombreuses heures de programmation, donc je fais juste une recherche de "android" un par un et vois si la recherche en saute un tag - si c'est le cas, je regarde de près et je vois où était la faute de frappe.

Nenad Bulatovic
la source
0

J'ai eu cette erreur dans Xamarin lorsque j'utilisais

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

dans un fichier de mise en page sans installer le package nuget pour android.support.v7.widget.CardView

L'installation du package nuget applicable a résolu le problème. J'espère que ça aide, je n'ai vu cette réponse nulle part dans la liste

hexagode
la source