본문 바로가기

Android/Tip

ActionBarDrawerToggle deprecated 문제

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