Android 3.x(Honeycomb) 기반의 앱에서 SplitActionBar를 추가하기..

안드로이드 3.x의 코드네임은 Honeycomb으로 태블릿 전용이고, 그래서, 굳이 SplitActionBar를 사용할 필요가 없다. 

하지만, 3.x ~ 최신의 버전까지, 폰 UI와  태블릿 UI를 하나의 바이너리로 지원하다고 가정하면, SplitActionBar가 필요해 지게 마련입니다. 

간단하게 SplitActionBar라는 것이 무엇인지를 살펴보면… 

아래의 이미지에서 볼 수 있듯이, ActionBar의 option menu가 아래로 내려온 것을 말한다..

안드로이드에서 SplitActionBar를 사용하기 위해서는 4.0 ICS에서 부터 AndroidMenifest.xml에 추가해 주시면 됩니다.. 

To enable split action bar, simply add uiOptions=”splitActionBarWhenNarrow” to your <activity> or<application> manifest element.

SplitActionBar를 static하게 지원하는 코드가 4.0부터 추가되어 있으니, 3.x에서 지원을 하려면, 4.0에서 추가된 Window 객체의 setUiOptions()를 추가하면 됩니다.. 

간단하게 3.x 기반의 코드에 4.0 이상의 기능인 setUiOptions()을 사용하려면.. 

1. @TargetApi(14) 어노테이션을 통해서 4.0의 코드가 들어가 있다고 알려줘서, 컴파일 에러를 피하구요.. 

2. 버전 체크를 통해서 4.0 이상인 경우에만 Window 객체에 setUiOptions()으로 SplitActionBar를 만들어 주면 됩니다.. 

따라서, 아래의 코드를 보시면.. SplitActionBar를 만들어 주는 onLoadSplitActionBar() 에서는 Reflection을 이용해서 4.0 이상의 Window 클래스에서 지원하는 메쏘드인 setUiOptions()를 사용합니다. 

	@TargetApi(14)
	private void onLoadSplitActionBar() {
		Window w = getWindow();
		try {
			Method m = w.getClass().getMethod("setUiOptions", new Class[]{ Integer.TYPE });
			m.invoke(w, Integer.valueOf(Window.FEATURE_ACTION_BAR_OVERLAY));
		} catch(Exception e) {
			if(DEBUG)
				ExceptionUtil.getException(e);
		}
	}
	
	@Override
	public void onCreate(Bundle bundle) {
		super.onCreate(bundle);
		if(android.os.Build.VERSION.SDK_INT >= 14) {
			this.onLoadSplitActionBar();		
		}     
.......
   }

위의 코드로 Honeycomb버전까지 포함하는 SplitActionBar를 만들수가 있습니다.. ^^

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.