yapp a.a 2 2 android annotations

44
Android Annotations Library 2013. 7. 25 YAPP 5이준영 YAPP Advanced Android Study . 13726금요일

Upload: -

Post on 29-Nov-2014

1.055 views

Category:

Technology


6 download

DESCRIPTION

YAPP Advanced Android 2주차 두번째 스터디 자료입니다. Android Annotations Library

TRANSCRIPT

Page 1: Yapp a.a 2 2 android annotations

Android AnnotationsLibrary

2013. 7. 25YAPP 5기 이준영

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 2: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

혹시 ‘자료구조’ 수업 들었나요?

13년 7월 26일 금요일

Page 3: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

링크드리스트,

큐,

스택,

맵,

힙,

정렬....

13년 7월 26일 금요일

Page 4: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

내가 구현하지 않아도,사실 누군가가 다 만들어놨습니다.

(그렇다고 몰라도 된다는 건 아니죠)

13년 7월 26일 금요일

Page 5: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

왜 갑자기 자료구조 얘기냐?

실은...

13년 7월 26일 금요일

Page 6: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

Android Annotationshttp://www.androidannotations.org

13년 7월 26일 금요일

Page 7: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 8: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

107 Lines -> 63 Lines

13년 7월 26일 금요일

Page 9: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

Android Annotations Features (1)

• Activities : @EActivity

• View : @ViewById, @AfterViews

• Handling Events : @Click, @LongClick, @Touch, @ItemClick, @LongItemClick, @ItemSelect

참고) https://github.com/excilys/androidannotations/wiki/Cookbook http://www.slideshare.net/realbeast/ss-11639744

13년 7월 26일 금요일

Page 10: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

Android Annotations Features (2)

• Application : @App

• Resource : @StringRes, @ColorRes, @AnimationRes, @BooleanRes, @ColorStateListRes, ...

• Extras : @Extra

• SystemServices : @systemService

• Injecting Html : @HtmlRes, @FromHtml 등 참고) https://github.com/excilys/androidannotations/wiki/Cookbook http://www.slideshare.net/realbeast/ss-11639744

13년 7월 26일 금요일

Page 11: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

안드로이드 프로젝트 생성

13년 7월 26일 금요일

Page 12: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 13: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" >

<Button android:id="@+id/btnGreetings" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="안녕하세요?" />

</RelativeLayout>

id - btnGreetings

13년 7월 26일 금요일

Page 14: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

MainActivity.java

• ContentView 설정 - onCreate 메서드에서setContentView(R.layout.activity_main.xml)

• Button (R.id.btnGreetings) 가져오기

• 버튼 클릭하면 토스트 메시지로 “안녕”

• 버튼을 길게 클릭하면토스트 메시지로 “안~~~~~~~녕”

13년 7월 26일 금요일

Page 15: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

public class MainActivity extends Activity { Button btnGreetings; // 인사 버튼

@Override // 액티비티가 만들어질 때 수행해야 할 작업들 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 뷰 찾아오기 btnGreetings = (Button)findViewById(R.id.btnGreetings); // 뷰에 클릭 이벤트 리스너 설정 btnGreetings.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 토스트 메시지 뿌리기 Toast.makeText(MainActivity.this, "안녕!?", Toast.LENGTH_SHORT).show(); } }); // 뷰에 롱클릭 이벤트 리스너 설정 btnGreetings.setOnLongClickListener(new OnLongClickListener() { @Override public boolean onLongClick(View v) { Toast.makeText(MainActivity.this, "안~~~~~~~~~녕!?", Toast.LENGTH_SHORT).show(); return true; } }); }}

13년 7월 26일 금요일

Page 16: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

준비

http://www.androidannotations.org

13년 7월 26일 금요일

Page 17: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 18: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 19: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

javadocsourcesandroidannotations-2.7.1.jarandroidannotations-api-2.7.1.jarHOW-TO.txtLICENSE.txt

압축을 풀어보면...

13년 7월 26일 금요일

Page 20: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

프로젝트에 폴더 추가

13년 7월 26일 금요일

Page 21: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

라이브러리 복사

• androidannotations-X.X.X-api.jar>>> libs 폴더에

• androidannotations-X.X.X.jar>>> compile-libs 폴더에

• 주의: androidannotations-X.X.X.jar 파일이 libs 폴더에 들어가면 안됨

13년 7월 26일 금요일

Page 22: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

프로젝트 설정 창 열기 프로젝트 >> Properties

13년 7월 26일 금요일

Page 23: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 24: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 25: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 26: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 27: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study . 13년 7월 26일 금요일

Page 28: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

준비 끝!

13년 7월 26일 금요일

Page 29: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@EActivityEnhance Activity 어노테이션

https://github.com/excilys/androidannotations/wiki/Enhance Activities13년 7월 26일 금요일

Page 30: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@EActivitypublic class MainActivity extends Activity {...

13년 7월 26일 금요일

Page 31: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

착한 Android Annotations

13년 7월 26일 금요일

Page 32: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

<activity android:name="yapp.aa.android.MainActivity_" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>

android:name=”....MainActivity” 에서MainActivity_ 언더바 붙이기

13년 7월 26일 금요일

Page 33: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

Android Annotations 라이브러리는어노테이션을 Compile 시에 처리하기 때문

※ Annotation Processing Tool

@EActivityMainActivity

APT

컴파일 시 APT가 @ 처리

MainActivity_생성

13년 7월 26일 금요일

Page 34: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

즉, 진짜 사용하는 MainActivity가 아닌MainActivity_

Intent intent = new Intent(OtherActivity.this, MainActivity_.class);startActivity(intent);

13년 7월 26일 금요일

Page 35: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@ViewById

• findViewById 역할

• @ViewById- id와 멤버 변수 이름이 같을 때

• @ViewById(R.id.xxx)- id와 멤버 변수 이름이 다를 때 명시적으로 지정

13년 7월 26일 금요일

Page 36: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

btnGreetings = (Button)findViewById(R.id.btnGreetings);

@ViewByIdButton btnGreetings; // 인사 버튼

멤버 변수 정의 위에 @ViewById

13년 7월 26일 금요일

Page 37: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@AfterViews

• @ViewById를 통해 바인딩 한 후에뷰에 추가 작업이 필요할 때

• @EActivity를 함께 쓰는 경우onCreate 메서드가 호출 될 시점에는 @ViewById에 대한 처리가 되기 전이므로NullPointerException이 발생

• 다른 어노테이션이 모두 처리된 후가장 마지막에 수행됨

13년 7월 26일 금요일

Page 38: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@AfterViewsvoid changeButtonText() { btnGreetings.setText("인사하기");}

@AfterViews 를 통해버튼의 레이블 변경

13년 7월 26일 금요일

Page 39: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@Click

• View.setOnClickListener() 역할

• 메서드 이름과 멤버 변수의 이름이 같을 때@Click

• 또는 명시적으로 지정@Click(R.id.xxx)

• 메서드에 적용하는 어노테이션

• 메서드는 private 이어서는 안됨

13년 7월 26일 금요일

Page 40: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

// 뷰에 클릭 이벤트 리스너 설정btnGreetings.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 토스트 메시지 뿌리기 Toast.makeText(MainActivity.this,

"안녕!?",Toast.LENGTH_SHORT).show();

}});

@Clickvoid btnGreetings() { Toast.makeText(MainActivity.this,

"안녕!?",Toast.LENGTH_SHORT).show();

}

13년 7월 26일 금요일

Page 41: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@LongClick도...

@LongClick(R.id.btnGreetings)void longGreetings() { Toast.makeText(MainActivity.this,

"안~~~~~~~~~녕!?",Toast.LENGTH_SHORT).show();

}

void btnGreetings는 메서드 이름이 중복되므로void longGreetings 로 하고,@LongClick(R.id.btnGreetings) 로 작성

13년 7월 26일 금요일

Page 42: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

onCreate 메서드가 할일은 더 이상 없으니@EActivity 가 수행하므로

onCreate 삭제

13년 7월 26일 금요일

Page 43: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

@EActivitypublic class MainActivity extends Activity { @ViewById Button btnGreetings; // 인사 버튼 @AfterViews void changeButtonText() { btnGreetings.setText("인사하기"); } @Click void btnGreetings() { Toast.makeText(MainActivity.this, "안녕!?", Toast.LENGTH_SHORT).show(); } @LongClick(R.id.btnGreetings) void longGreetings() { Toast.makeText(MainActivity.this, "안~~~~~~~~~녕!?", Toast.LENGTH_SHORT).show(); }}

13년 7월 26일 금요일

Page 44: Yapp a.a 2 2 android annotations

YAPP Advanced Android Study .

Android Annotations 라이브러리를 배워봤습니다.

그렇다면 지금 해야할 일은 뭘까요?

13년 7월 26일 금요일