Commonlife's Blog

My daily life

Archive for 7월 2013

Adapter Pattern

leave a comment »

1. 상속을 사용한 Adapter Pattern

 AdapterPattern_01
PrintBanner extends Banner implements Print 로 Banner 클래스를 상속하고, Print 인터페이스를 구현한다.
 
1) 실제 기능 구현은 Banner 클래스에 한다.
2) PrintBanner는 구현된 Banner 클래스를 상속하고, 호출되어 사용될 수 있도록 Print 인터페이스를 구현한다.
3) 사용할 땐 Print 인터페이스의 method들을 호출하여 Banner 클래스의 method들이 작동되게 한다.
 
PrintBanner의 method들을 보면 아래와 같이 Banner클래스의 method를 호출하는 Print 인터페이스 method를 구현한다.
public void printWeak(){
    showWithParen();
}
 
public void printStrong(){
    showWithAster();
}
 
그럼 사용을 할 땐
Print print = new PrintBanner()로 생성한 후 print.printWeak(), print.printStrong()으로 사용한다.
 
 
 
 

2. 위임을 이용한 Adapter Pattern

 
AdapterPattern_02
PrintBanner extends Print 로 Print 클래스를 상속하고, Banner 클래스를 멤버변수로 선언한다.
 
1) 실제 기능 구현은 Banner 클래스에 한다.
2) PrintBanner는 Banner를 멤버변수로 선언한다.
3) PrintBanner의 method들은 Banner 클래스의 method들을 호출한다.
3) 사용할 땐 Print 클래스의 method들을 호출하여 Banner 클래스의 method들이 작동되게 한다.
Advertisements

Written by tocommonlife

2013/07/13 at 23:36

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 , ,