→ xmlns = xml name space
- XML Namespaces란 각각의 요소들의 네임 충돌을 방지할 수 있는 방법이다(진짜 말 그대로 NameSpace이다..)
- 접두어를 통해 네임 충돌을 해결하는 것이다
- 기본 문법 :
xmlns:prefix="URI"
ex.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
❗여기서 xmlns:android
, xmlns:app
, xmlns:tools
는 오른쪽에 표기된 URI를 담는 네임스페이스의 역할을 한다. 따라서 해당 네임을 써야만 URI가 보유한 속성에 절대적으로 접근할 수 있는 것은 아니다!(그래도 혼란을 방지하기 위해 default로 많이 사용하는 xmlns:android
, xmlns:app
, xmlns:tools
의 네이밍을 따르자)
❗여기서 URI들은 모두 패키지이다
ex. 아래의 두 코드는 같은 동작을 한다.
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/tv_order"
...
/>
<layout xmlns:mdb="http://schemas.android.com/apk/res/android">
<TextView
mdb:id="@+id/tv_order"
...
/>
- 보다 자세한 내용은 문서 참조
-
xmlns:app="http://schemas.android.com/apk/res-auto"
-
즉,
http://schemas.android.com/apk/res-auto
URI를 담는 네임 스페이스 -
정확히는,
http://schemas.android.com/apk/res/[yourpackage name]
형식으로 작성ex. 레이아웃 매니저 속성 :
http://schemas.android.com/apk/res/layoutManager
- 사실은
http://schemas.android.com/apk/res
하위의 모든 attribute에 접근할 때 사용 - 그러나 주로 아래와 같은 용도로 사용
- 하위 버전 대응
- 커스텀 뷰 생성 시 커스텀 attribute 정의
xmlns가 이런 식으로 정의되어 있고 DataBinding 관련 예제 코드를 볼 때 bind:~~
이런 식으로 된 코드를 많이들 보았을 것이다. 결론부터 얘기하자면 xmlns:app
이나 xmlns:bind
나 http://schemas.android.com/apk/res-auto
를 참조하는 name space이기 때문에 둘다 같은 동작을 한다. 따라서 xmlns:bind="http://schemas.android.com/apk/res-auto"
는 DataBinding에서 활용하는 attribute를 해당 name space로 관리한다는 걸 명시적으로 보여주기위해서 사용한다고 볼 수 있다.
https://velog.io/@odesay97/레이아웃-xml-파일에서-xmlns-코드의-의미는-xml에서의-import-기능
https://stackoverflow.com/questions/28045648/android-layout-when-to-use-app-vs-android