các vấn đề thường gặp phát sinh trong chế độ xem Android, Lỗi phân tích cú pháp XML: tiền tố không liên kết


296

Tôi có vấn đề thường xuyên trong xem 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
Kiểm tra tất cả các câu trả lời được đăng cho việc này; tất cả chúng đều hợp lệ Vấn đề là không gian tên XML và một số cách nó có thể sai lầm khủng khiếp.
Whitey04

Một lưu ý nhanh, nếu bạn quên bình luận TẤT CẢ trong dòng đầu tiên của mình, bạn thậm chí sẽ không nhận thấy có gì đó không đúng với bố cục của mình (như thế này: <? Xml version = "1.0" mã hóa = "utf-8"? > <! - triệt tiêu TẤT CẢ ->)
Mike

Câu trả lời:


555

Một vài lý do mà điều này có thể xảy ra:

1) Bạn thấy lỗi này với một không gian tên không chính xác hoặc lỗi chính tả trong thuộc tính. Giống như 'xmlns' là sai, nó phải làxmlns:android

2) Nút đầu tiên cần chứa: xmlns:android="http://schemas.android.com/apk/res/android"

3) Nếu bạn đang tích hợp AdMob, hãy kiểm tra các tham số tùy chỉnh như ads:adSize, bạn cần

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

4) Nếu bạn đang sử dụng, LinearLayoutbạn có thể phải xác định các công cụ:

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


"Nút đầu tiên" nghĩa là gì? Trong câu hỏi ban đầu là TextView?
David Doria

1
... và trong Google Play AdMob mới, đó là: xmlns: ads = " schemas.android.com/apk/res-auto "
user1010160

Cảm ơn rất nhiều, tôi đã giải quyết vấn đề của mình trong trường hợp 3 bằng cách thêm dòng này xmlns: ads = " schemas.android.com/apk/lib/com.google.ads " +1 cho câu trả lời
Shylendra Madda

101

Tôi sẽ thêm một câu trả lời riêng chỉ vì tôi không thấy nó ở đây. Đó không phải là 100% những gì Pentium10 yêu cầu, nhưng tôi đã kết thúc ở đây bằng cách tìm kiếmError parsing XML: unbound prefix

Hóa ra tôi đã sử dụng các tham số tùy chỉnh cho quảng cáo AdMob như thế nào ads:adSize, nhưng tôi đã không thêm

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

để bố trí. Khi tôi thêm nó, nó hoạt động rất tốt.


63

Tôi có vấn đề này như nhau.

Đảm bảo rằng tiền tố (android: [anything]) được viết đúng chính tả và được viết chính xác. Trong trường hợp của dòng, xmlns:android="http://schemas.android.com/apk/res/android" đảm bảo rằng bạn có tiền tố đầy đủ xmlns:androidvà nó được viết đúng chính tả. Tương tự với bất kỳ tiền tố nào khác - đảm bảo chúng được viết đúng chính tả và có android:[name]. Đây là những gì đã giải quyết vấn đề của tôi.


1
Có, trong trường hợp của tôi, lỗi là do androi: src = "@ drawable / Half" - điều này rõ ràng là sai!
IgorGanapolsky

Vâng, tôi đã có cùng một vấn đề. Tôi cũng đang thiếu phần "xmln:".
dùng1032613

32

Như bạn đã đề cập, bạn cần chỉ định đúng không gian tên . Bạn cũng thấy lỗi này với một không gian tên không chính xác.

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

sẽ không làm việc.

Thay đổi:

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

đến

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

Thông báo lỗi đang đề cập đến mọi thứ bắt đầu "android:" vì XML không biết android:không gian tên "" là gì.

xmlns:android định nghĩa nó


23

Lỗi này có thể xảy ra trong trường hợp bạn sử dụng tiền tố không xác định, chẳng hạn như:

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

Trình biên dịch Android không biết XYZ là gì vì nó chưa được xác định.

Trong trường hợp của bạn, bạn nên thêm định nghĩa bên dưới vào nút gốc của tệp xml.

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


2
Điều này đã làm điều đó cho tôi. Đó là một kiểu gõ sai: Thay vì android: layout_ weight tôi đã gõ anrdoid: layout_weigth.
Yahel

Nguyễn, làm thế nào để xác định XYZ? Cảm ơn
Anatoliy Shuba

10

lỗi tiền tố không liên kết cho Chỉ số ViewPager:

Cùng với các thẻ tiêu đề sau trong ParentLayout của bạn:

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

Đồng thời thêm:

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

Điều này đã lừa tôi.


9

Đối với tôi, tôi đã gặp lỗi "tiền tố không liên kết" trên dòng đầu tiên ở đây, mặc dù tôi đã viết sai Android trên dòng thứ tư.

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

7

Tôi đã có cùng một vấn đề, và thấy rằng giải pháp là thêm android: tools vào nút đầu tiên. Trong trường hợp của tôi, đó là 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">

Có, nếu bạn tham khảo các công cụ, nhưng không thêm không gian tên cho các công cụ, bạn cũng sẽ nhận được điều này.
Bác sĩ Ferrol Blackmon

3

Tôi sẽ gửi thêm một chút cho những người mới và cho mọi người, như tôi, không hiểu XML.

Các câu trả lời ở trên khá tốt, nhưng câu trả lời chung là bạn cần một không gian tên cho bất kỳ không gian tên nào được sử dụng trong tệp config.xml.

Dịch: Bất kỳ tên thẻ XML nào có thẻ có không gian tên trong đó blah là không gian tên và fubar là thẻ XML. Không gian tên cho phép bạn sử dụng nhiều công cụ khác nhau để diễn giải XML bằng tên thẻ riêng của chúng. Ví dụ, Intel XDK sử dụng không gian tên intelxdk và android sử dụng android. Do đó, bạn cần các không gian tên sau hoặc bản dựng tạo máu (tức là Lỗi phân tích cú pháp XML: tiền tố không bị ràng buộc) được dịch thành: Bạn đã sử dụng một không gian tên, nhưng không xác định nó.

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

3

OK, có rất nhiều giải pháp ở đây nhưng không thực sự giải thích nguyên nhân gốc rễ của vấn đề vì vậy chúng tôi đi đây:

khi bạn nhìn thấy một thuộc tính như android:layout_width="match_parent"các androidphần là tiền tố, định dạng cho một thuộc tính ở đây là PREFIX:NAME="VALUE". trong XML, các không gian tên và tiền tố là những cách để tránh xung đột đặt tên, ví dụ chúng ta có thể có hai thuộc tính riêng biệt có cùng tên nhưng các tiền tố khác nhau như: a:a="val"b:a="val".

để sử dụng các tiền tố như androidhoặc appbất kỳ tiền tố nào khác, bạn nên xác định một không gian tên bằng xmlnsthuộc tính.

Vì vậy, nếu bạn gặp vấn đề này, chỉ cần tìm các tiền tố không có không gian tên được xác định, nếu bạn có tools:...bạn nên thêm không gian tên công cụ như một số câu trả lời được đề xuất, nếu bạn có app:...thuộc tính, bạn nên thêm xmlns:app="http://schemas.android.com/apk/res-auto"vào phần tử gốc

Đọc thêm:

Không gian giải thích XML

Không gian tên XML trong W3


2

Lỗi này thường xảy ra nếu bạn không bao gồm xmlns:mmđúng, nó thường xảy ra trong dòng mã đầu tiên.

đối với tôi đó là ..

xmlns: mm = "http://mill Yearsmedia.com/android/schema"

mà tôi đã bỏ lỡ trong dòng đầu tiên của mã

<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

Trong trường hợp của tôi, lỗi không phải do bất kỳ vấn đề không gian tên xml nào ở trên. Thay vào đó là vị trí của android:idthuộc tính - nó cần phải là mục đầu tiên trong khai báo của thành phần cụ thể.

Vậy đây:

<TextView android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:id="@+id/bottomtext" 
      android:singleLine="true" />

... Cần đọc như thế này:

<TextView android:id="@+id/bottomtext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:singleLine="true" />

1

Bên cạnh tất cả điều này, cũng có một kịch bản xảy ra lỗi này-

Khi bạn hoặc dự án thư viện của bạn xác định thuộc tính tùy chỉnh int attr.xml và bạn sử dụng các thuộc tính này trong tệp bố cục của mình mà không xác định không gian tên.

Nói chung, chúng tôi sử dụng định nghĩa không gian tên này trong tiêu đề của tệp bố trí của chúng tôi.

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

Sau đó, đảm bảo tất cả các thuộc tính trong tệp của bạn sẽ bắt đầu bằng

android:ATTRIBUTE-NAME

Bạn cần xác định nếu một số attirbute của bạn không bắt đầu bằng thứ gì đó không phải là Android: ATTRIBUTE-NAME như

temp:ATTRIBUTE-NAME

Trong trường hợp này, bạn có "temp" này cũng như không gian tên, thường bằng cách bao gồm-

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

1

Bạn chỉ cần thêm không gian tên thích hợp trong thẻ gốc của bạn. xmlns: android = "http://schemas.android.com/apk/res/android" Các elemets Android được khai báo trong không gian tên này. Cũng giống như nhập lớp hoặc gói.


0

Nó thường xảy ra với tôi khi tôi viết sai android - Tôi chỉ gõ andorid hoặc giống nhau, và nó không rõ ràng ngay từ cái nhìn đầu tiên, sau nhiều giờ lập trình, vì vậy tôi chỉ tìm kiếm "android" từng cái một và xem liệu tìm kiếm có bỏ qua không thẻ - nếu có thì tôi có một cái nhìn cận cảnh và tôi thấy lỗi đánh máy ở đâu.


0

Tôi đã gặp lỗi này ở Xamarin khi tôi đang sử dụng

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

trong tệp bố cục mà không cần cài đặt gói nuget cho android.support.v7.widget.CardView

Cài đặt gói nuget áp dụng đã khắc phục sự cố. Hy vọng nó có ích, tôi đã không thấy câu trả lời này ở bất cứ đâu trong danh sách

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.