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

297

У меня частая проблема в представлении 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
источник
9
Проверьте все ответы, опубликованные для этого; они все действительны. Проблема заключается в пространствах имен XML и нескольких путях, которые могут пойти ужасно неправильно.
whitey04
Небольшое замечание: если вы забудете подавленный комментарий ALL в своей первой строке, вы даже не заметите, что с вашим макетом что-то не так (например: <? Xml version = "1.0" encoding = "utf-8"? > <! - подавить ВСЕ ->)
Майк

Ответы:

555

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

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"

Pentium10
источник
Что вы подразумеваете под "первым узлом"? В первоначальном вопросе, что TextView?
Дэвид Дория
1
... и в новой Google Play AdMob это: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160
Большое спасибо, я решил свою проблему в случае 3, добавив эту строку xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 для ответа
Shylendra Madda
101

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

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

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

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

MalcolmOcean
источник
63

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

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

Даниил
источник
1
Да, в моем случае ошибка была вызвана androi: src = "@ drawable / half" - что было явно неправильно!
Игорь Ганапольский
Да, у меня была такая же проблема. Мне также не хватало части "xmln:".
user1032613
32

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

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

в

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

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

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

VonC
источник
23

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

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

Нгуен Минь Бинь
источник
2
Этот сделал это для меня. Это был неправильный опечатка: вместо android: layout_weight я набрал anrdoid: layout_weigth.
Яхель
Нгуен, как определить XYZ? Спасибо
Анатолий Шуба
10

ошибка несвязанного префикса для индикатора 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"

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

amalBit
источник
9

Для меня я получил ошибку «unbound prefix» в первой строке, хотя у меня был орфографический ошибочный android в четвертой строке.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
anrdoid:fillViewport="true"
>
flobacca
источник
7

У меня была та же проблема, и я обнаружил, что решение было добавить инструменты android: на первый узел. В моем случае это 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">
Себастьян Брейт
источник
Да, если вы ссылаетесь на инструменты, но не добавляете пространство имен для инструментов, вы тоже это получите.
Доктор Феррол Блэкмон
3

Я добавлю немного больше для новичков и для людей, как я, которые не понимают 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"
turbogeek
источник
3

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

когда вы видите, что атрибут, такой 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

mohas
источник
2

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

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

XMLNS: мм = "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" >
Кайлас
источник
1

В моем случае ошибка не была вызвана какой-либо из указанных выше проблем с пространством имен 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" />
okredo
источник
1

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

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

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

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

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

android:ATTRIBUTE-NAME

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

temp:ATTRIBUTE-NAME

В этом случае у вас есть этот «темп» также в качестве пространства имен, как правило, путем включения

xmlns:temp="http://schemas.android.com/apk/res-auto"
Анудж Гарг
источник
1

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

Гевария Пурва
источник
0

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

Ненад Булатович
источник
0

Я получил эту ошибку в 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 устранила проблему. Надеюсь, это поможет, я не видел этот ответ нигде в списке

hexagod
источник