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

StackOverflow https://stackoverflow.com/questions/2221221

Вопрос

У меня частая проблема в представлении 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>
Это было полезно?

Решение

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

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"

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Вместе со следующими тегами заголовка в вашем родительском описании:

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"

Это сделало свое дело за меня.

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

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

У меня была такая же проблема, и я обнаружил, что решение состояло в том, чтобы добавить android: tools к первому узлу.В моем случае это линейное описание:

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

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

Эта ошибка обычно возникает, если вы не включили 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" >

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

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

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

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

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

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

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

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

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

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

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

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

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

android:ATTRIBUTE-NAME

Вам нужно identfy, если какой-либо из ваших атрибутов не начинается с чего-то другого, кроме android:ATTRIBUTE-NAME, например

temp:ATTRIBUTE-NAME

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top