Hyun Chul's Utopia

허니컴 이하에서 ActionBar 사용하기 (ActionbarSherlock) 본문

프로그래밍/Android

허니컴 이하에서 ActionBar 사용하기 (ActionbarSherlock)

디프시다루핀 2012. 10. 5. 16:05

 안드로이드는 버젼이 매우 다양합니다. 1.6부터 시작한다고 해도... 지금이 4.1.0 까지 나왔으니.. 그 종류만 해도 매우 많지요. 문제는 아이폰과 다르게 사용자들의 기기는 사용하는 버젼이 매우 다양하게 분포하고 있다는 점입니다. 때문에 무엇인가 만들기 시작하면 과연 타겟을 어떤 버젼에 맞추느냐..? 또한 문제가 되곤 합니다.

 타켓 버젼에 따라서 사용할 수 있는 API 항목들이 다르다는것은 참 좋으면서도 애매한 상황입니다. 이번에 다루려고 하는 ActionbarSherlock 또한 그런 문제점을 해결하고자 나온 방안이 되겠네요.


 잡설이 길었습니다. 이번에 다뤄볼 주제는 ActionbarSherlock 입니다. 3.0 이후 등장한 ActionBar를 사용하기 위한 하위호환 라이브러리(?) 정도로 생각할 수 있겠네요. ActionBar는 직관적이고 간결한 UI를 구성하는데 매우 효과적인 방법이라고 생각합니다. (적어도 제 생각에는 말이지요..) 특히나 4.0 이후로 등장한 Holo.Light.DarkActionBar Theme를 적용한다면 더더욱 이쁜것 같기도 합니다. 방금 언급한 Holo.Light.DarkActionBar Theme 는 3.0에도 없는 항목이지요. 하지만! ActionbarSherlock 를 사용한다면 이 또한 해결 할 수 있습니다. 


 우선 사용을 위한 라이브러리를 다운받아야 합니다. 공식홈페이지를 방문하시면 받을수 있습니다. ( http://actionbarsherlock.com/ ) 메인 페이지에 보시면 바로 다운로드 링크가 있습니다.



받으신 파일은 적당한 곳에 압축을 풀어 줍니다. 이렇게 하면 우선 준비는 끝이네요. 이제 이클립스를 실행하고 ActionbarSherlock 를 적용하면 됩니다.




1. 우선 이클립스 실행 후, 프로젝트를 하나 추가 합니다.


 여기서 생성할 프로젝트는 ActionbarSherlock 를 라이브러리화 시키기 위한 프로젝트 입니다. 실제 개발을 위한 프로젝트와는 살짝 성격이 다릅니다. 다른 라이브러리처럼 JAR파일 형태로 배포되지 않고, 소스코드 자체로 배포를 해버리기 때문에 이러한 과정을 거치게 됩니다. (그래서 귀찮은 작업을 하게 되지요...ㅋ)


 당연히 프로젝트는 Android Project로 선택합니다. (New -> Android Project )



 프로젝트는 다음과 같이 설정합니다.

  - 2번째 항목인 Create project from existing source 선택

  - Location 경로를 압축 해제한 폴더 안에 있는 Libary 폴더 지정.



 하고나서 Finish 클릭~




2. Libary 지정


 방금 생성한 프로젝트의 속성창으로 들어갑니다. (해당 프로젝트 마우스 우클릭 하면 나오지요..) 속성창으로 이동한 뒤 Android 항목을 선택하시면 아래와 같은 화면을 확인할 수 있습니다. 거기서 아래쪽에 위치한 'Is Libary' 항목을 체크해 줍니다.



 참고로 말씀드리면 위의 Android API Level은 4.0으로 지정해 두는게 좋은것 같습니다. 제가 이버젼 저버젼 확인을 해 보았는데 에러를 내뿜을 경우가 있더군요. 이 부분은 좀더 알아보아야 겠습니다.


 위의 체크를 하고난 뒤에 다음을 선택해 줍니다. "프로젝트 마우스 우클릭 --> Android Tools --> Add Support Libary...."




 이 작업까지 하고나면 진짜진짜로 ActionbarSherlock 를 사용하기 위한 준비 작업이 마무리 된겁니다. 다음 차례는 ActionbarSherlock 를 적용하여 만들 실제 프로젝트를 생성합니다.




3. 실제 작업 프로젝트 생성.


 위의 작업까지 정상적으로 수행 하셧다면 이제부터는 별다른 문제없이 사용할 수 있습니다. 우선 적당한 프로젝트를 하나 생성합니다. 물론 Android Project로 생성하셔야 합니다. 프로젝트를 생성하고 난 뒤, 해당 프로젝트의 속성창으로 이동합니다.


 속성창으로 이동하시면 다시 Android 항목으로 들어옵니다. 그리고 아래쪽에 보시면 Libary를 추가할 수 있습니다. Add버튼을 누르면, 이전에 만들어 두었던 ActionbarSherlock 프로젝트가 있는것을 확인할 수 있습니다. 그걸 선택하고 확인버튼 누르시면 됩니다.


 * 이번에는 'Is Libary' 항목을 체크하지 않습니다!!





  이렇게 정상적으로 프로젝트가 생성된 것을 확인할 수 있습니다. R.java 파일이 두개나 생성되어 있네요..




 이제 마무리 단계만 남았습니다. 코드를 약간 수정해야 합니다.




4. 코드 수정.


 본래 ActionBar는 3.0 이후로 생긴 API입니다. 즉, 우리가 앞의 과정을 진행 함으로서 결과적으로 ActiounBar 클래스가 2개 생기게 된 꼴이 되버렸습니다. 우리가 추가한 ActionbarSherlock 의 ActionBar, 그리고 원래 API로 존재하고 있던 ActionBar 이렇게 말이죠. 추가적으로 ActionbarSherlock 라이브러리를 추가 함으로서 android-support-v4 라이브러리 또한 추가가 되었습니다.


 다시 이야기를 앞으로 돌리자면, 우리는 앞의 과정을 3.0 이하 즉 원래 없던 녀석들에게도 상위 레벨의 좋은 API를 사용하기 위함이 그 목적이었습니다. 당연히 하위버젼에는 ActionBar, Fragment등등 이 없죠. 이를 대체해 주어야 합니다. 이번 과정에서 하는 작업은 바로 이러한 작업입니다.


 Android.app 패키지에서 나온 ActionBar가 아닌, com.actionbarsherlock.app 패키지에서 나온 ActionBar를 사용해야 합니다. 또한 Activity 까지 SherlockActivity 로 변경하여야 합니다.


 ActonBar를 받아오기 위해서는 기존에 있던 getActionBar()메소드가 아닌 getSupportActionBar()메소드를 이용합니다.


 ActionBar를 사용하기 위해서 AndroidManiFest.xml 역시 수정해 줍니다. 저는 처음에도 말했듯이 블랙&화이트가 석여있는 Light.DarkActionBar테마로 지정해 보겠습니다.


 application 항목에 android:theme="@style/Theme.Sherlock.Light.DarkActionBar" 항목을 추가 합니다.

기존의 Theme이름과 약간 다르다는게 차이점이네요..



 사용된 코드는 다음과 같습니다.

package com.bhc.darphin.actionbar.test;

import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.ActionBar.TabListener;
import com.actionbarsherlock.app.SherlockActivity;

public class ActionBarTestDarphinActivity extends SherlockActivity {

	private ActionBar aBar;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		aBar = getSupportActionBar();
		aBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
		aBar.setTitle("Darphin Support Action Bar.");

		ActionBar.Tab tab1 = aBar.newTab().setText("버튼1").setTabListener(onTabLisenter);
		ActionBar.Tab tab2 = aBar.newTab().setText("버튼2").setTabListener(onTabLisenter);
		ActionBar.Tab tab3 = aBar.newTab().setText("버튼3").setTabListener(onTabLisenter);

		aBar.addTab(tab1);
		aBar.addTab(tab2);
		aBar.addTab(tab3);
	}

	TabListener onTabLisenter = new TabListener() {

		@Override
		public void onTabUnselected(Tab tab, FragmentTransaction ft) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onTabSelected(Tab tab, FragmentTransaction ft) {
			// TODO Auto-generated method stub

		}

		@Override
		public void onTabReselected(Tab tab, FragmentTransaction ft) {
			// TODO Auto-generated method stub

		}
	};
}



    

    
        
            
                

                
            
        
    







 이렇게 적용한 뒤, 에뮬레이터에서 실행한 화면입니다. 에뮬레이터는 프로요 (2.2)버젼으로 생성했으며, 방금 작업한 프로젝트의 SDK버젼 또한 uses-sdk android:minSdkVersion="8" 로 지정한 상태입니다.





 쓸데없이 이미지가 크네요.. -_-;;


 자 이렇게 해서 ActionBar를 하위버젼에 적용하는 방법을 확인해 보았습니다. 저도 몇번 삽질한 끝에 방법을 알아냈네요.. 


 아무쪼록  유익한 정보가 되었으면 좋겠습니다.. ^^




Comments