Commonlife's Blog

My daily life

Posts Tagged ‘android

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

android : Facebook SDK 3.0 연동하기

leave a comment »

= 사전에 필요한 부분 =

– facebook에 앱을 만들고 hash key 등록하기 :

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

= 기존의 방식 =

– new Facebook()와 Facebook.authorize()

= 바뀐 방식 =

UiLifecycleHelper과 widget.LoginButton 클래스의 이용

1. Session.StatusCallback 변수 선언 후 call 메소드를 @Override 한다.(parameter에 Session 클래스가 있는데 이걸 통해 AccessToken을 가져온다.)

2. LoginButton을 가지고 있는 Activity의 onCreate 메소드에서 UiLifecycleHelper를 1번에서 만든 call 변수를 parameter로 만든다.

3. 해당 activity에 onCreate, onResume, onPause, onDestroy, onActivityResult, onSaveInstanceState를 @Override하여 UiLifecycleHelper.onCreate, UiLifecycleHelper.onResume, UiLifecycleHelper.onPause, UiLifecycleHelper.onDestroy, UiLifecycleHelper.onActivityResult, UiLifecycleHelper.onSaveInstanceState를 호출한다.

@Override

public void onCreate(Bundle savedInstanceState){

    UiLifecycleHelper.onCreate(savedInstanceState);
}

= 바뀐 권한 정책 =

* LoginButton에서는 setReadPermissions 메소드를 통해서 페이스북 접근 권한을 설정할 수 있다.

* The LoginButton can only be associated with either read permissions or publish permissions, but not both. Calling both setReadPermissions and setPublishPermissions on the same instance of LoginButton will result in an exception being thrown unless clearPermissions is called in between. ==> 결국 read 와 publish 둘 다 권한을 줄 수가 없다. 둘 중 하나만 가능.

* 결국 읽기 권한을 먼저 획득 후 쓰기 권한을 요청한다.

http://developers.facebook.com/docs/concepts/login/permissions-login-dialog/

– publish 권한은 필요할 때만 요청하기 위해서 둘을 나눠놓고 6번 이상의 권한을 유저에게 물으면 로그인을 끝까지 수행하지 않는다고 합니다.

Written by tocommonlife

2013/01/23 at 11:16

Android에 게시됨

Tagged with , , , ,