частые проблемы, возникающие в представлении Android, Ошибка синтаксического анализа XML: несвязанный префикс

У меня частые проблемы с просмотром 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>

person Pentium10    schedule 08.02.2010    source источник
comment
Проверьте все ответы, опубликованные для этого; все они действительны. Проблема заключается в пространствах имен XML и нескольких путях, по которым это может пойти не так.   -  person whitey04    schedule 31.01.2011
comment
Небольшое примечание: если вы забудете комментарий supress ALL в самой первой строке, вы даже не заметите, что что-то не так с вашим макетом (например, ‹? Xml version = 1.0 encoding = utf-8?› ‹! - -подавить ВСЕ - ›)   -  person Mike    schedule 08.09.2015


Ответы (16)


Пара причин, по которым это может произойти:

1) Вы видите эту ошибку с неправильным пространством имен или опечаткой в ​​атрибуте. Как будто "xmlns" неверно, это должно быть xmlns:android

2) Первый узел должен содержать: xmlns:android="http://schemas.android.com/apk/res/android"

3) Если вы интегрируете AdMob, отметьте специальные параметры, например ads:adSize, вам нужно

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

4) Если вы используете LinearLayout, вам, возможно, придется определить инструменты:

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

person Pentium10    schedule 08.02.2010
comment
Что вы имеете в виду под первым узлом? Исходный вопрос заключается в том, что TextView? - person David Doria; 06.09.2013
comment
... а в новом Google Play AdMob это: xmlns: ads = schemas.android.com/ apk / res-auto - person user1010160; 12.06.2014
comment
Большое спасибо, я решил свою проблему в случае 3, добавив эту строку xmlns: ads = schemas.android.com/apk/lib/com.google.ads +1 за ответ - person Shailendra Madda; 13.06.2015
comment
Потрясающие. Большое спасибо - person Titus Sutio Fanpula; 26.04.2021

Я собираюсь добавить отдельный ответ только потому, что я его здесь не вижу. Это не на 100% то, о чем просил Pentium10, но я попал сюда, выполнив поиск по запросу Error parsing XML: unbound prefix

Оказалось, что я использовал специальные параметры для объявлений AdMob, например ads:adSize, но не добавил

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

к макету. Как только я добавил его, он отлично работал.

person MalcolmOcean    schedule 16.12.2012

У меня была такая же проблема.

Убедитесь, что префикс (android: [любой]) написан правильно и правильно. В случае строки xmlns:android="http://schemas.android.com/apk/res/android" убедитесь, что у вас есть полный префикс xmlns:android и что он написан правильно. То же самое с любыми другими префиксами - убедитесь, что они написаны правильно и имеют android:[name]. Вот что решило мою проблему.

person Daniel    schedule 20.09.2010
comment
Да, в моем случае ошибка была вызвана androi: src = @ drawable / half - что явно неверно! - person IgorGanapolsky; 25.05.2011
comment
Да, у меня была такая же проблема. Мне также не хватало xmln: part. - person user1032613; 31.05.2012

Как вы упомянули, вам необходимо указать правое пространство имен. Вы также видите эту ошибку с неправильным пространством имен.

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

не будет работать.

Изменять:

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

to

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

Сообщение об ошибке относится ко всему, что запускает "android:", поскольку XML не знает, что такое пространство имен "android:".

xmlns:android определяет это.

person VonC    schedule 08.02.2010

Эта ошибка может возникнуть, если вы используете неопределенный префикс, например:

<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 не знает, что такое XYZ, поскольку он еще не определен.

В вашем случае вы должны добавить ниже определение в корневой узел файла xml.

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

person Nguyen Minh Binh    schedule 08.12.2011
comment
Этот сделал это за меня. Это была хромая опечатка: вместо android: layout_weight я набрал anrdoid: layout_weigth. - person Yahel; 23.01.2012
comment
Нгуен, как определить XYZ? Спасибо - person Anatolii Shuba; 19.12.2013

ошибка несвязанного префикса для индикатора ViewPager:

Наряду со следующими тегами заголовка в вашем parentLayout:

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

Также добавьте:

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

Это помогло мне.

person amalBit    schedule 10.02.2014

У меня здесь в первой строке появилась ошибка «несвязанный префикс», хотя в четвертой строке было написано с ошибкой android.

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

У меня была та же проблема, и я обнаружил, что решением было добавить android: tools к первому узлу. В моем случае это 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">
person Sebastian Breit    schedule 27.09.2012
comment
Да, если вы ссылаетесь на инструменты, но не добавляете пространство имен для инструментов, вы тоже получите это. - person Dr. Ferrol Blackmon; 15.10.2013

Я добавлю еще немного для новичков и таких людей, как я, которые не понимают XML.

Вышеупомянутые ответы довольно хороши, но общий ответ заключается в том, что вам нужно пространство имен для любого пространства имен, используемого в файле config.xml.

Перевод: любое имя тега XML, имеющее имя, является тегом с пространством имен, где blah - это пространство имен, а fubar - это тег XML. Пространство имен позволяет использовать множество различных инструментов для интерпретации XML с их собственными именами тегов. Например, Intel XDK использует пространство имен intelxdk, а android использует android. Таким образом, вам понадобятся следующие пространства имен, иначе сборка подбросит кровь (например, ошибка синтаксического анализа XML: несвязанный префикс), которая преобразуется в: Вы использовали пространство имен, но не определили его.

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

Хорошо, здесь есть много решений, но на самом деле они не объясняют основную причину проблемы, поэтому приступим:

когда вы видите атрибут типа android:layout_width="match_parent", часть android является префиксом, формат для атрибута здесь PREFIX:NAME="VALUE". в XML пространства имен и префиксы - это способы избежать конфликтов имен, например, мы можем иметь два разных атрибута с одинаковым именем, но разными префиксами, например: a:a="val" и b:a="val".

чтобы использовать префиксы типа android или app или любые другие, вы должны определить пространство имен с помощью атрибута xmlns.

поэтому, если у вас есть эта проблема, просто найдите префиксы, для которых не определено пространство имен, если у вас есть tools:..., вы должны добавить пространство имен инструментов, как предлагается в некоторых ответах, если у вас есть атрибут app:..., вы должны добавить xmlns:app="http://schemas.android.com/apk/res-auto" к корневому элементу

Дальнейшее чтение:

Простое объяснение пространств имен XML

Пространства имен XML в W3

person mohas    schedule 19.09.2018

Эта ошибка обычно возникает, если вы неправильно указали xmlns:mm, обычно это происходит в первой строке кода.

для меня это было ..

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

что я пропустил в первой строке кода

<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" >
person Kailas    schedule 14.02.2014

В моем случае ошибка не была вызвана какой-либо из вышеуказанных проблем с пространством имен xml. Вместо этого это было местоположение атрибута android:id - он должен был быть первым элементом в объявлении конкретного элемента.

Итак, это:

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

... нужно читать так:

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

Помимо всего этого, существует также сценарий, в котором возникает эта ошибка -

Когда вы или ваш проект библиотеки определяете настраиваемый атрибут int attr.xml, и вы используете эти атрибуты в своем файле макета без определения пространства имен.

Обычно мы используем это определение пространства имен в заголовке нашего файла макета.

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

Затем убедитесь, что все атрибуты в вашем файле начинаются с

android:ATTRIBUTE-NAME

Вам необходимо идентифицировать, если некоторые из ваших атрибутов не начинаются с чего-то другого, кроме android: ATTRIBUTE-NAME, например

temp:ATTRIBUTE-NAME

В этом случае у вас есть этот "temp" также как пространство имен, обычно путем включения-

xmlns:temp="http://schemas.android.com/apk/res-auto"
person Anuj Garg    schedule 10.12.2014

Вам просто нужно добавить собственное пространство имен в свой корневой тег. xmlns: android = "http://schemas.android.com/apk/res/android" Элементы Android объявляются в этом пространстве имен. Это то же самое, что и импорт класса или пакета.

person Gevaria Purva    schedule 30.06.2016

Обычно это случается со мной, когда я ошибаюсь в написании android - я просто набираю andorid или что-то подобное, и это не очевидно с первого взгляда, особенно после многих часов программирования, поэтому я просто выполняю поиск «android» один за другим и смотрю, не пропускает ли поиск один тег - если это так, то я внимательно смотрю и вижу, где была опечатка.

person Nenad Bulatovic    schedule 12.12.2014

Я получил эту ошибку в Xamarin, когда использовал

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

в файле макета без установки пакета nuget для android.support.v7.widget.CardView

Установка соответствующего пакета nuget устранила проблему. Надеюсь, это поможет, я не видел этого ответа нигде в списке

person hexagod    schedule 22.02.2020