частые проблемы, возникающие в Android View, Ошибка при разборе XML:несвязанный префикс
-
19-09-2019 - |
Вопрос
У меня частая проблема в представлении 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.Вместо этого это было местоположение 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" один за другим и смотрю, пропускает ли поиск один тег - если пропускает, то я внимательно смотрю и вижу, где была опечатка.