학습2014. 4. 29. 13:41

navigation drawer 는 화면 왼쪽 측면에 표시되는 앱 메뉴입니다. 보통은 숨겨져 있다가 액션바의 앱 아이콘을 터치하거나 화면의 왼쪽 가장자리를 오른쪽으로 swipe 하면 나타납니다.

http://developer.android.com/intl/ko/training/implementing-navigation/nav-drawer.html  에 보면 샘플을 다운받아서 살펴 볼수 있습니다. 

네비게이션 드로우어는 v4 서포트 라이브러리에 추가된 DrawerLayout 을 이용하므로 API level 4 이상에서 사용할수 있으나 예제에는 액션바(API level 11이상)가 사용되고 있고 layout 파일중 drawer_list_item.xml 파일내에서 API level 14 속성(android:minHeight="?android:attr/listPreferredItemHeightSmall" 과 android:textAppearance="?android:attr/textAppearanceListItemSmall" ) 과 API level 11 속성인 (android:background="?android:attr/activatedBackgroundIndicator") 사용되고 있어서 manifest 파일에 minSdkVersion 을 14로 설정해 두었고, 따라서 API level 14 이상에서만 작동하게 되어 있습니다. 이 예제를 그 이전버전에서도 액션바가 작동할수 있도록 바꾸어 보고자 합니다.

이전 버전에서 액션바를 사용하기 위해서는 actionbarcompat 이란 서포트 라이브러리를 사용하면 됩니다. support library 설정하기 에 따라 이미 android-support-v7-appcompat 라이브러리를 이 샘플 프로젝트에 추가해 두었다는 가정하에 글을 진행합니다.

1. Activity 를  ActionBarActivity 로 변경하고 getActionBar() 를 getSupportActionBar() 로 변경함

2. invalidateOptionsMenu() 를 supportInvalidateOptionsMenu() 로 변경

3. res/layout/drawer_list_item.xml 파일을 res/layout-v14/ 폴더 만든후 그곳으로 복사함. 그 뒤에 ?android:attr/listPreferredItemHeightSmall 과 ?android:attr/textAppearanceListItemSmall 그리고 ?android:attr/activatedBackgroundIndicator 속성이 들어간 라인은 res/layout/drawer_list_item.xml 에서 삭제합니다. 그 이유는 API level 14 와 11 에서 사용할수 있는 속성이기 때문입니다.

또는 values-v14 의 대체 리소스로 처리할수도 있습니다

4. res/layout/activity_main.xml 에 보면  네비게이션 드로워의 폭을 240dp 로 설정해 두었는데 태블릿처럼 큰화면인 경우에는 320dp 가 적용되도록 values-sw320dp 의 대체 리소스로 처리해도 좋습니다

5. manifest.xml 파일에서 어플리케이션 테마를 AppCompat 으로 설정해야 합니다. @style/Theme.AppCompat 또는 @style/Theme.AppCompat.Light 또는 @style/Theme.Appcompat.Light.DarkActionBar 처럼 설정해야 합니다 

예) <application

        android:label="@string/app_name"
        android:icon="@drawable/ic_launcher"
        android:theme="@style/Theme.AppCompat.Light.DarkActionBar">

참고 : http://gmariotti.blogspot.kr/2013/07/actionbarcompat-and-navigationdrawer.html 와 http://droidstack.com/61/tutorial-actionbarcompat/

 

Posted by JJC