ActionBarDrawerToggle deprecated
1. 환경
- Mac OSX 10.10 Yosemite
- Android Studio 1.3 Build #AI - 141.2117773
- JRE 1.8.0._51-bl6 x84_64
- android-sdk_r24.3.4
2. 문제
- Andorid Studio에서 Project 생성 시 Navigation Drawer Activity로 지정 후 생성했을 시 ActionBar 위의 Menu Button이 모두 화살표(→)로 표현되는 것을 확인할 수 있다.
- 이전 Version에서 확인했을 때는 누르기 전은 ≡로 누른 후는 →로 표현됐었다.
3. 문제 발생 지점
- NavigationDrawerFragment
· app/java/[Package Name]/NevigationDrawerFragment File에서 발생
- 문제 발생 Method
1 2 3 4 5 6 7 | mDrawerToggle = new ActionBarDrawerToggle( getActivity(), /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ R.string.navigation_drawer_open, /* "open drawer" description for accessibility */ R.string.navigation_drawer_close /* "close drawer" description for accessibility */ ) | cs |
· Constructor인 ActionBarDrawerToggle은 android.support.v4.app.ActionBarDrawerToggle Package의 ActionBarToggle Class를 사용하는데 이 ActionBarToggle Class가 22.0.0으로 Upgrade되면서 Deprecated되었다.
· Deprecated란 API로서 더이상 제공되지않아 사용하지 못한다는 것을 뜻한다.
4. 문제 해결방법
- 문제 해결방법은 생각보다 간단하다.
- 확인사항
· 일단 가장 먼저 확인할 것은 External Library로써 appcompat-v7-23.x.x가 import되어 있는지 확인해야한다.
· 없는 경우
◦ File → Project Structure을 선택한다.
◦ Modules에 app의 Dependencies를 Click하면 왼쪽 하단에 +를 확인할 수 있으며 +를 선택한다.
◦ 1. Library Dependencies를 선택한다.
◦ appcompat을 입력하면 appcompat-v7을 확인할 수 있으며 해당 항목을 선택한 후 OK를 누르면 추가된다.
- NavigationDrawerFragment.java 수정
· import 수정
1 | import android.support.v4.app.ActionBarDrawerToggle; | cs |
◦ ActionBarDrawerToggle이 support.v4에서 제공하지 않기 때문에 아래와 같이 수정해준다.
1 | import android.support.v7.app.ActionBarDrawerToggle; | cs |
◦ ...support.v4...을 ...support.v7...로 수정한다.
· Constructor 수정
◦ import 부분을 수정하고 나면 ActionBarDrawerToggle Constructor의 매개변수 toolbar의 값인 R.drawable.ic_drawer를 참조할 수 없다고 출력될 것이다.
◦ ActionBarDrawerToggle Constructor는 두 가지로 매개변수가 4개인 것과 5개인 것 두 개가 존재한다.
◦ 하나는 가운데 부분인 toolbar 부분이 없는 Constructor로 deprecated되지 않아 사용가능하다.
◦ 따라서 해당 부분을 삭제하면 정상적으로 Compile 가능하다.
5. 요약
- support-v4의 ActionBarDrawerToggle가 deprecated되어 문제발생
- NavigationDrawerFragment의 import 부분의 ...support.v4...을 ...support.v7...로 수정
- NavigationDrawerFragment의 ActionBarDrawerToggle Constructor의 매개변수 toolbar의 값인 R.drawable.ic_drawer 삭제