No resource identifier found for attribute 'layout_behavior' in package
1. Layout의 Behavior
안드로이드 스튜디오에서 프로젝트를 생성할 때 기본적으로 생성되는 액티비티 종류를 "Basic Activity"로 선택하면, 아래의 그림과 같이 "layout_behavior" 속성이 액티비티의 레이아웃 리소스 XML 파일에 자동으로 추가됩니다.
Layout 클래스(또는 Layout의 하위 클래스)에 있어서 Behavior라고 하는 것은, 사용자가 화면에서 어떠한 입력 행동(드래그 또는 스와이프(Swipe)같은 제스쳐)을 수행했을 때, Layout 클래스와 그 하위 뷰들이 어떻게 상호작용(interaction)할 것인지를 구현한 것을 말합니다.
2. "layout_behavior" 속성에 대한 지원.
"layout_behavior" 속성이 추가된 것은 안드로이드 5.0 Lollipop에서 머티리얼 디자인(Meterial Deisign)이 적용되었을 때부터입니다. 머티리얼 디자인을 지원하기 위해 추가된, 디자인 서포트 라이브러리(Design Support Library)에 "layout_behavior" 속성이 정의되어 있죠.
compile 'com.android.support:design:24.1.1'
3. 문제 상황. (No resource identifier found for attribute layout_behavior in package XXX)
안드로이드 프로젝트를 만들 때 "Empty Activity"를 선택하면, "Basic Activity"와 달리, 액티비티의 레이아웃 속성에 "layout_behavior"가 자동으로 추가되지 않습니다. 그에 따라 "build.gradle(Module: app)" 파일에도 디자인 서포트 라이브러리에 대한 Dependency가 존재하지 않죠.
Error:(2) No resource identifier found for attribute 'layout_behavior' in package 'com.recipes4dev.examples.customlistview2ndtest'
Error:(11, 26) No resource found that matches the given name (at 'layout_behavior' with value '@string/appbar_scrolling_view_behavior').
만약 "layout_behavior"로 인해 "Namespace 'app' is not bound..." 에러가 표시된다면, 레이아웃의 속성에 "xmlns:app="http://schemas.android.com/apk/res-auto"" 를 추가해주세요.)
4. 해결 방법.
지금까지 기술한 내용을 읽어보시면 아시겠지만, 해결 방법은 간단합니다. "layout_behavior" 속성을 사용하지 않던지, 사용한다면 그에 따른 설정을 추가해주면 되죠.
4.1 "layout_behavior" 속성 삭제.
"layout_behavior" 속성 사용이 앱의 UX에 영향을 미치지 않는다면, 속성이 사용된 줄을 그냥 지우셔도 됩니다. 그러면 에러가 사라질 것입니다.
4.2 디자인 서포트 라이브러리 (Design Support Library) 추가.
"layout_behavior" 속성을 무조건 사용해야 한다면, 이제 그에 따른 설정을 추가해줘야겠죠. 위에서 설명했듯이, "layout_behavior" 속성을 사용하기 위해서는 디자인 서포트 라이브러리에 대한 Dependency가 프로젝트에 추가되어 있어야 합니다. 이는 프로젝트의 "build.gradle (Module: app)" 파일에 작성됩니다.
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:design:24.1.1'
}
그리고 "build.gradle" 파일을 수정하고나면, Gradle build 과정을 다시 수행하기 위해 Gradle Sync를 해줘야 합니다. Gradle Sync기능은 "build.gradle" 파일이 수정 및 저장되는 순간, 안드로이드 스튜디오의 소스 편집 화면의 상단에 표시되는 윈도우에서 "Sync Now" 버튼을 클릭하여 수행할 수 있습니다.
4.3 "Project Structure" 메뉴를 통한 Dependency 추가.
"build.gradle" 파일을 직접 편집하고 Gradle Sync 과정이 뭔가 꺼림직하다면, "Project Structure"의 app Modules 설정 관리를 통해 Dependency를 지정할 수 있습니다. (물론 Dependency를 삭제하는 것도 가능합니다.)
File
- Project Structure
메뉴를 선택한 다음, 다이얼로그의 메뉴 선택화면에서 app
- Dependency
탭을 선택합니다.
여기서 보여지는 항목들이 "build.gradle" 파일의 "dependencies" 목록에 표시된 내용입니다. 오른쪽의 "+" 버튼을 누른 다음, "Library dependency" 메뉴를 선택합니다.
실행된 "Choose Library Dependency" 다이얼로그에는 현재 안드로이드 스튜디오에 설치된 라이브러리 목록이 표시되며, "design (com.android.support:design:x.x.x)"로 표시되는 라이브러리를 선택한 다음, "OK" 버튼을 선택합니다.
그리고 "Project Structure" 다이얼로그의 "Dependencies" 내용을 보면, 디자인 서포트 라이브러리 항목이 추가된 것을 확인할 수 있습니다.
마지막으로 "OK" 버튼을 누르면 "Gradle Sync"가 수행되고, "build.gradle" 파일에 디자인 서포트 라이브러리 항목이 추가된 것을 확인할 수 있습니다.
4. 참고
- 안드로이드 디자인 서포트 라이브러리
- [안드로이드 디자인 서포트 라이브러리]의 내용을 확인하세요.
.END.
'ANDROID 스튜디오 > 문제 해결' 카테고리의 다른 글
sdk build tools revision is too low for project. (0) | 2017.04.07 |
---|---|
No changes to deploy. (Instant Run) (0) | 2016.09.26 |