Commonlife's Blog

My daily life

Posts Tagged ‘깜빡임

Android : ActionBar 사용하지 않을 때 등장 후 사라지는 문제(깜빡임 문제)

leave a comment »

기존 2.X대에서 부터 개발했었고, 당시 만들었던 코드를 가지고 ActionBar와 Fragment, GCM 등을 적용 시킬거라면 많이 혼란스러웠을 것이다.

이에 대한 나의 경험담 중 ActionBar의 경우이다.

 

ActionBar는 Fragment나 GCM과 다르게 support library로 지원되지 않는다. 3.X 이상에서만 사용가능하고, 이 때문에 2.X에서도 쓸 수 있도록 오픈소스로 나온 것이 Sherlock이다.

 

그런데

1. 2.X ~ 4.X까지 지원하고,

2. ActionBar를 사용하고 싶지 않을 때….

 

새로운 프로젝트를 만들고

1. 코드 상에서 getActionBar().hide();를 호출하면 화면에 ActionBar가 나온 후 사라진다.

2. AndroidManifest.xml에서 theme에 NoActionBar 를 추가하면 에러가 뜬다.

-> 2.X대에서는 ActionBar를 사용할 수 없기에 나오는 에러이다.

 

위에서 처럼 ActionBar가 나왔다 사라지는 것도, 에러도 해결하는 방법은 아래와 같다.

 

AndroidManifest.xml에서 application 태그를 보면

<application
    android:icon =“@drawable/ic_launcher”
    android:label =“@string/app_name”
    android:theme =“@style/AppTheme” >

 

AppTheme 스타일을 가져다 쓴다.

프로젝트 디렉토리에서 style.xml을 다음과 같이 3군데에 있다.

res/values/style.xml

res/values-v11/style.xml

res/values-v14/style.xml

 

그리고 보는 것 처럼 공통과 버전별로 따로 관리가 가능하다.

 

style.xml의 내용은

<style name= “AppBaseTheme” parent = “android:Theme.Light” />
<style name= “AppTheme” parent = “AppBaseTheme” />

처럼 AppBaseTheme을 상속받아 사용하고 해당 AppBaseTheme은 res/values/style.xml, res/values-v11/style.xml과 res/values-v14/style.xml에서 따로 정의하여 사용가능하다.

 

그렇기 때문에 res/values-v11/style.xml, res/values-v14/style.xml에서

<style name = “AppBaseTheme” parent = “android:Theme.Holo.Light.NoActionBar” >

로 선언하면 된다.

Written by tocommonlife

2013/07/07 at 06:14

Android에 게시됨

Tagged with , ,