drcarter의 DevLog

Android에서 보통 support-v4 library를 많이 사용하죠. ViewPager와 Fragment등등 때문에...

그런데 이번에 ActionBar를 하위 버전에서 사용할 수 있도록 suppert-v7이 변경되어서 나왓습니다.

google에서 가면 갈수록 api가 상위버전에서만 사용할 수 있는 것들을 하위 버전에서 사용할 수 있도록 해주니 좋긴 좋군요. 그런데 하위버전에서 안되서 기존의 있는 sdk를 이용하여 custom하게 만들어서 사용하던 분들은 약간의 짜증?? 이 날 수도 있겠죠 ㅋㅋ 저같은 경우는 ViewPager가 안나왔을 때 ViewPager와 같은 기능을 만들어서 잘 사용하고 있더니 suppert-v4에 ViewPager를 넣어서 내놓더군요..... 욕심에 제가 만든걸 잘 사용하다가 결국엔 ViewPager로만 사용하게 되었던 ^^


자 그럼 ActionBar를 사용하기 위한 suppert-v7의 이용 방법 입니다.


전 eclipse 3.7 Indigo와 ADT 21을 이용합니다. 현재 eclipse는 4.3 kepler가 최신이고, ADT는 22입니다. 


1. Android SDK Manager를 이용하여 Android Suppert Library를 rev.18로 업데이트 한다.

2. Android Project from Existing Code

3. suppert-v4 하위에 있는 appcompat library 프로젝트 추가.

 - SDK가 설치된 하위 폴더의 extra->android->compatibility->v7->appcompat 추가.

   ex)/Volumes/Macintosh DATA/03.sdk/android-sdk-macosx/extras/android/compatibility/v7/appcompat


4. 추가된 부분 확인 - 아래 그림과 같이 support-v7-appcompat의 library프로젝트가 추가된 것을 확인할 수 있습니다.

5. Sample Project만들기.

 - 간단한 샘플 프로젝트를 만든 뒤 Properties->Android->Library에서 좀전에 추가한 support-v7-appcompat프로젝트를 추가합니다. 그리고 Project Build Target은 4.1.2 (API 16)이상으로 해야 합니다. suppoert-v7-appcompat이 4.1.2(API 16)으로 되어 있기 때문에...


6. AndroidManifest.xml의 Theme변경

android:theme="@style/AppTheme" -> android:theme="@style/Theme.AppCompat"

으로 변경합니다. 어떤 구조로 되어 있는지는 suppert-v7-appcompat의 resource인 themes.xml파일을 살펴보시면 됩니다.


7. ActionBarActivity 

import android.support.v7.app.ActionBarActivity;

public class MainActivity extends Activity -> public class MainActivity extends ActionBarActivity

으로 변경


8. menu 추가

 - ActionBarCompat용 menu리소스를 추가 합니다. 기존과 틀린점이 있다면 xmlns:action_sample="http://schemas.android.com/apk/res-auto" 의 action_sample namespace입니다. 하위 아이템을 보면 [action_sample:showAsAction="always" ]의 추가된 namespace로된 속성값이 있습니다. ActionBarCompat의 namespace로 온 속성을 사용하기 위함입니다.

- action.menu.xml 내용




android:id="@+id/menu_sample"
android:title="@string/action_sample"
android:icon="@drawable/ic_launcher"
action_sample:showAsAction="always"/>



	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.action_menu, menu);
		return true;
	}

}


9. event 발생

 - 추가된 actionbar의 아이콘을 클릭했을 때 toast message를 보여주도록 했습니다.

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		switch (item.getItemId()) {
		case R.id.menu_sample: {
			Toast.makeText(this, R.string.action_sample, Toast.LENGTH_SHORT)
					.show();
			break;
		}
		}

		return super.onOptionsItemSelected(item);
	}