android视图中经常出现的问题,解析XML时出错:未绑定前缀


296

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

9
检查所有为此发布的答案;它们都是有效的。问题是XML名称空间及其几种可能出错的方式。
whitey04 '01

快速说明,如果您忘记了第一行的“所有”注释,您甚至不会注意到布局有问题(例如:<?xml version =“ 1.0” encoding =“ utf-8”? > <!-禁止所有->)
Mike

Answers:


554

发生这种情况的几个原因:

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"


“第一节点”是什么意思?最初的问题是TextView吗?
大卫·多里亚

1
...而在新的Google Play AdMob中,它是:xmlns:ads =“ schemas.android.com/apk/res-auto
user1010160 2014年

非常感谢,我通过添加以下行xmlns:ads =“ schemas.android.com/apk/lib/com.google.ads ” 解决了情况3 的问题
Shylendra Madda

101

我将添加一个单独的答案,只是因为我在这里看不到它。Pentium10要求的不是100%,但我最终还是在这里搜索了Error parsing XML: unbound prefix

原来我为AdMob广告使用了自定义参数,例如ads:adSize,但我没有添加

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

到布局。一旦添加,它就很棒。


63

我有同样的问题。

确保前缀(android:[whatever])的拼写正确且书写正确。对于该行xmlns:android="http://schemas.android.com/apk/res/android" ,请确保您具有完整的前缀xmlns:android并且其拼写正确。与其他任何前缀相同-确保正确拼写并具有android:[name]。这就是解决我的问题的原因。


1
是的,在我的情况下,错误是由androi:src =“ @ drawable / half”引起的-这显然是错误的!
IgorGanapolsky

是的,我有同样的问题。我也缺少“ xmln:”部分。
user1032613'5

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 定义它。


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
这是为我做的。这是一个la脚的错误类型:我键入的是anrdoid:layout_weigth而不是android:layout_weight。
Yahel 2012年

Nguyen,如何定义XYZ?谢谢
Anatoliy Shuba 2013年

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"

这对我有用。


9

对我来说,尽管我在第四行拼错了android,但在第一行出现了“ unbound prefix”错误。

<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添加到第一个节点。就我而言,这是一个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">

是的,如果您引用工具,但不添加工具的名称空间,则也会得到此名称。
费罗尔·布莱克蒙博士(Ferrol Blackmon)

3

我将为那些不了解XML的新手和像我这样的人提供更多信息。

上面的答案相当不错,但一般的答案是,您需要为config.xml文件中使用的任何名称空间使用名称空间。

转换:具有的任何XML标记名称都是带有名称空间的标记,其中blah是名称空间,fubar是XML标记。使用命名空间,您可以使用许多不同的工具来使用自己的标记名来解释XML。例如,英特尔XDK使用命名空间intelxdk,而android使用android。因此,您需要以下名称空间,否则该构建会抛出很多错误(即,错误解析XML:未绑定前缀),该名称将转换为:您使用了名称空间,但未定义它。

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

3

好的,这里有很多解决方案,但实际上并不能解释问题的根本原因,所以我们开始:

当您看到诸如part之类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命名空间简单说明

W3中的XML命名空间


2

如果未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" >

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

1

除此之外,还存在发生此错误的情况-

当您或您的图书馆项目定义自定义属性int attr.xml时,您可以在布局文件中使用这些属性而不定义namespace。

通常,我们在布局文件的标头中使用此名称空间定义。

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

然后确保文件中的所有属性都应以

android:ATTRIBUTE-NAME

如果某些服装不是以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>

在布局文件中而不安装android.support.v7.widget.CardView的nuget包

安装适用的nuget软件包可解决此问题。希望有帮助,我在列表中的任何地方都没有看到此答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.