problemas frequentes que surgem na visualização android, Erro ao analisar XML: prefixo não acoplado

296

Eu tenho um problema frequente na visualização 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
fonte
9
Verifique todas as respostas postadas para isso; todos eles são válidos. O problema é namespaces XML e várias maneiras pelas quais isso pode dar terrivelmente errado.
whitey04
Uma observação rápida: se você esquecer o comentário supress ALL na sua primeira linha, nem perceberá que algo está errado com seu layout (assim: <? Xml version = "1.0" encoding = "utf-8"? > <! - suprimir ALL ->)
Mike

Respostas:

555

Algumas razões pelas quais isso pode acontecer:

1) Você vê esse erro com um espaço para nome incorreto ou um erro de digitação no atributo. Como 'xmlns' está errado, deve serxmlns:android

2) O primeiro nó precisa conter: xmlns:android="http://schemas.android.com/apk/res/android"

3) Se você estiver integrando a AdMob, verifique os parâmetros personalizados ads:adSize, como :

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

4) Se você estiver usando, LinearLayoutpode ser necessário definir ferramentas:

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

Pentium10
fonte
O que você quer dizer com "o primeiro nó"? Na pergunta original é que o TextView?
David Doria
1
... e no novo Google Play AdMob é: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160
Muito obrigado, eu resolvi meu problema no caso 3, adicionando este xmlns linha: anúncios = " schemas.android.com/apk/lib/com.google.ads " +1 para a resposta
Shylendra Madda
101

Vou adicionar uma resposta separada apenas porque não a vejo aqui. Não é 100% o que o Pentium10 pediu, mas acabei aqui pesquisandoError parsing XML: unbound prefix

Acontece que eu estava usando parâmetros personalizados para anúncios da AdMob como ads:adSize, mas não tinha adicionado

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

para o layout. Depois que eu adicionei, funcionou muito bem.

MalcolmOcean
fonte
63

Eu tenho esse mesmo problema.

Verifique se o prefixo (android: [tanto faz]) está escrito corretamente e escrito corretamente. No caso da linha, xmlns:android="http://schemas.android.com/apk/res/android" verifique se você tem o prefixo completo xmlns:androide se está escrito corretamente. O mesmo acontece com outros prefixos - verifique se eles estão escritos corretamente e possuem android:[name]. Foi isso que resolveu meu problema.

Daniel
fonte
1
Sim, no meu caso, o erro foi causado por androi: src = "@ drawable / half" - o que estava claramente errado!
IgorGanapolsky
Sim, eu tive o mesmo problema. Estava faltando a parte "xmln:" também.
User1032613
32

Como você mencionou, você precisa especificar o espaço para nome correto . Você também vê esse erro com um espaço para nome incorreto.

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

não funciona.

Mudança:

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

para

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

A mensagem de erro está se referindo a tudo o que inicia "android:", pois o XML não sabe qual é o android:espaço para nome " ".

xmlns:android define isso.

VonC
fonte
23

Este erro pode ocorrer no caso de você usar prefixo não 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>

O compilador Android não sabe o que é XYZ, pois ainda não foi definido.

No seu caso, você deve adicionar abaixo define o nó raiz do arquivo xml.

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

Nguyen Minh Binh
fonte
2
Este fez isso por mim. Era um erro de digitação: em vez de android: layout_weight, digitei anrdoid: layout_weigth.
Yahel
Nguyen, como definir XYZ? Obrigado
Anatoliy Shuba
10

erro de prefixo não acoplado para o ViewPager Indicator:

Junto com as seguintes tags de cabeçalho em seu parentLayout:

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

Adicione também:

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

Isso fez o truque para mim.

amalBit
fonte
9

Para mim, recebi o erro "prefixo não acoplado" na primeira linha aqui, apesar de ter digitado incorretamente o android na quarta linha.

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

Eu tive o mesmo problema e descobri que a solução era adicionar o android: tools ao primeiro nó. No meu caso, é um 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
fonte
Sim, se você fizer referência a ferramentas, mas não adicionar o espaço para nome das ferramentas, também receberá isso.
Dr. Ferrol Blackmon
3

Vou falar um pouco mais para os novatos e para as pessoas, como eu, que não entendem XML.

As respostas acima são bastante boas, mas a resposta geral é que você precisa de um espaço para nome para qualquer espaço usado no arquivo config.xml.

Tradução: qualquer nome de marca XML que possui é uma marca com um espaço para nome em que blá é o espaço para nome e fubar é a marca XML. O espaço para nome permite que você use muitas ferramentas diferentes para interpretar o XML com seus próprios nomes de tags. Por exemplo, o Intel XDK usa o espaço de nome intelxdk e o Android usa android. Portanto, você precisa dos seguintes espaços para nome ou a compilação lança sangue (por exemplo, Erro ao analisar XML: prefixo não acoplado) que é traduzido para: Você usou um espaço para nome, mas não o definiu.

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

OK, existem muitas soluções aqui, mas na verdade não explicam a causa raiz do problema, então vamos lá:

quando você vê um atributo como android:layout_width="match_parent"a androidpeça como prefixo, o formato para um atributo aqui é PREFIX:NAME="VALUE". em XML, espaços para nome e prefixos são maneiras de evitar conflitos de nomenclatura. Por exemplo, podemos ter dois atributos distintos com o mesmo nome, mas prefixos diferentes como: a:a="val"eb:a="val" .

Para usar prefixos como esse androidou appqualquer outro, você deve definir um espaço para nome usandoxmlns atributo

portanto, se você tiver esse problema, localize prefixos que não tenham um espaço para nome definido; se você tiver tools:..., adicione o espaço para nome das ferramentas, conforme sugerido por algumas respostas; se tiver um app:...atributo, adicionexmlns:app="http://schemas.android.com/apk/res-auto" ao elemento raiz

Leitura adicional:

Explicações simples de namespaces XML

Namespaces XML no W3

mohas
fonte
2

Esse erro geralmente ocorre se você não incluiu o xmlns:mmarquivo corretamente, geralmente ocorre na primeira linha do código.

para mim foi ..

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

que eu perdi na primeira linha do 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
fonte
1

No meu caso, o erro não foi causado por nenhum dos problemas de espaço para nome xml acima. Em vez disso, era a localização doandroid:id atributo - ele precisava ser o primeiro item na declaração do elemento específico.

Então, é isso:

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

... precisava ler assim:

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

Além de tudo isso, também há um cenário em que esse erro ocorre -

Quando você ou seu projeto de biblioteca define o atributo personalizado int attr.xml, e utiliza esses atributos no arquivo de layout sem definir o espaço para nome.

Geralmente usamos essa definição de namespace no cabeçalho do nosso arquivo de layout.

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

Em seguida, verifique se todos os atributos no seu arquivo devem começar com

android:ATTRIBUTE-NAME

Você precisa identificar se alguns dos seus attirbute não estão começando com algo diferente do android: ATTRIBUTE-NAME like

temp:ATTRIBUTE-NAME

Nesse caso, você tem esse "temp" também como espaço para nome, geralmente incluindo:

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

Você só precisa adicionar um espaço de nome adequado na sua tag raiz. xmlns: android = "http://schemas.android.com/apk/res/android" Os elemets do Android são declarados neste espaço de nome. É o mesmo que importar classe ou pacote.

Gevaria Purva
fonte
0

Geralmente acontece comigo quando eu digito incorretamente o android - apenas digito andorid ou semelhante, e não é óbvio à primeira vista, especialmente depois de muitas horas de programação, então faço uma pesquisa por "android" um por um e ver se a pesquisa ignora um tag - se isso acontecer, eu dou uma olhada e vejo onde houve erro de digitação.

Nenad Bulatovic
fonte
0

Eu recebi esse erro no Xamarin quando estava 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>

em um arquivo de layout sem instalar o pacote nuget para android.support.v7.widget.CardView

A instalação do pacote de nuget aplicável corrigiu o problema. Espero que ajude, não encontrei esta resposta em nenhum lugar da lista

hexágono
fonte