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

268

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

14 ответов

519
Лучший ответ

Несколько причин, по которым это может произойти:

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

2) Сначала node должен содержать: 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) Если вы используете LinerLayout, вам может потребоваться определить инструменты

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

  • 0
    Что вы подразумеваете под "первым узлом"? В оригинальном вопросе, что TextView?
  • 1
    нет, LinearLayout это первый узел
Показать ещё 2 комментария
98

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

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

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

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

54

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

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

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

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

<?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 определяет его.

22

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

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

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

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

  • 2
    Этот сделал это для меня. Это был неправильный опечатка: вместо android: layout_weight я набрал anrdoid: layout_weigth.
  • 0
    Нгуен, как определить XYZ? Спасибо
Показать ещё 1 комментарий
10

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

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

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"

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

8

Для меня я получил ошибку "несвязанного префикса" на первой строке здесь, хотя на четвертой строке у меня был орфографический андроид.

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

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

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

1

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

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

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

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

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

android:ATTRIBUTE-NAME

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

temp:ATTRIBUTE-NAME

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

xmlns:temp="http://schemas.android.com/apk/res-auto"
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" />
  • 5
    Странно, порядок атрибутов в одном элементе не должен иметь значения ...
0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню