티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
frequent issues arising in android view, Error parsing XML: unbound prefix
안드로이드 뷰에서 발생하는 일반적인 문제 중 하나인 "Error parsing XML: unbound prefix" 오류입니다.
문제 내용
I have frequent problem in android view, Error parsing XML: unbound prefix on Line 2
.
안드로이드 뷰에서 "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>
높은 점수를 받은 Solution
A couple of reasons that this can happen:
이러한 문제가 발생하는 이유는 다음과 같습니다:
1) You see this error with an incorrect namespace, or a typo in the attribute. Like 'xmlns' is wrong, it should be xmlns:android
1. 'xmlns'가 아닌 'xmlns:android' 여야 하는 올바른 네임스페이스(namespace)이거나, 속성에 오타가 있는 경우 이러한 오류가 발생할 수 있습니다.
2) First node needs to contain: xmlns:android="http://schemas.android.com/apk/res/android"
2. 첫 번째 노드에는 다음이 포함되어야 합니다: xmlns:android="http://schemas.android.com/apk/res/android
3) If you are integrating AdMob, check custom parameters like ads:adSize
, you need
3. AdMob를 통합하는 경우, 광고 크기(ads:adSize)와 같은 사용자 정의 매개 변수를 확인해야 합니다.
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
4) If you are using LinearLayout
you might have to define tools:
4. 만약 LinearLayout을 사용하고 있다면 tools:를 정의해야 할 수도 있습니다.
xmlns:tools="http://schemas.android.com/tools"
가장 최근 달린 Solution
OK, there are lots of solutions here but non actually explain the root cause of the problem so here we go:
여러 해결책들이 있지만 실제 문제의 근본 원인을 설명하지 않는 것 같습니다. 그래서 이제 문제의 근본 원인을 설명하겠습니다.
when you see an attribute like android:layout_width="match_parent"
the android
part is the prefix, the format for an attribute here is PREFIX:NAME="VALUE"
. in XML, namespaces and prefixes are ways to avoid naming conflicts for example we can have two distinct attributes with same name but different prefixes like: a:a="val"
and b:a="val"
.
android:layout\_width="match\_parent"와 같이 android로 시작하는 속성을 볼 때, android는 prefix입니다. 여기서 attribute의 format은 PREFIX:NAME="VALUE"입니다. XML에서 namespace와 prefix는 이름 충돌을 피하는 방법입니다. 예를 들어 a:a="val"과 b:a="val"과 같은 같은 이름이지만 다른 prefix를 가진 두 가지 속성을 가질 수 있습니다.
to use prefixes like android
or app
or any other your should define a namespace using xmlns
attribute.
android나 app 같은 접두사를 사용하려면, xmlns 속성을 사용하여 네임스페이스를 정의해야 합니다.
so if you have this issue just find prefixes that do not have a namespace defined, if you have tools:...
you should add tools namespace as some answeres suggested, if you have app:...
attribute you should add xmlns:app="http://schemas.android.com/apk/res-auto"
to the root element
따라서, 이 문제가 발생하면 네임스페이스가 정의되지 않은 프리픽스를 찾아야 합니다. 만약 tools:... 가 있다면 몇몇 답변에서 제안한 대로 tools 네임스페이스를 추가해야하고, app:... 속성이 있다면 루트 엘리먼트에 xmlns:app="" 를 추가해야합니다.
Further reading:
추가적인 자료:
XML Namespaces simple explanation
XML 네임스페이스 간단한 설명
출처 : https://stackoverflow.com/questions/2221221/frequent-issues-arising-in-android-view-error-parsing-xml-unbound-prefix
'개발 > 안드로이드' 카테고리의 다른 글
SharedPreferences.onSharedPreferencesChangeListener가 일관되게 호출되지 않는 문제 (0) | 2023.02.21 |
---|---|
Espresso를 사용하여 다이얼로그가 표시되는지 확인하는 방법 (0) | 2023.02.20 |
android.content.res.Resources$NotFoundException: String resource ID #0x0 오류 수정하기 (0) | 2023.02.19 |
안드로이드에서 adjustResize와 adjustPan의 차이점 (0) | 2023.02.19 |
안드로이드 인플레이트(inflate)의 의미 (0) | 2023.02.18 |