안드로이드 개발이 참 많이 편해졌다.
기능도 많아지고 편리한 라이브러리도 많아졌다.
웬만한건 직접 만들기 전에 검색이라도 한 번 해보는게 이득이다.
나보다 유능한 사람들이 편리하게 라이브러리화 시켜놓은 것들이 수두룩하니까..
오늘 편리한 라이브러리 하나 소개를 하고자 하는데
아는 사람은 많이들 아는 버터나이프라는 라이브러리다.
http://jakewharton.github.io/butterknife/
앱을 만든다고 하면 프로젝트를 생성하고 액티비티를 만든 다음에
아마 다음과 같은 코드를 만들게 될 것이다.
이건 어느 액티비티에나 거의 다 있고 반복적으로 사용하는 코드들이다.
액티비티 뿐 아니고 프래그먼트든 어디든 UI 가 있다면 거의 들어가는 코드들이다.
public class MainActivity extends FragmentActivity implements View.OnClickListener {
private FloatingActionButton fab, fab_setting, fab_trash, fab_tag, fab_memo;
private FloatingActionButton fab_new_memo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(this);
fab_setting = (FloatingActionButton) findViewById(R.id.fab_setting);
fab_setting.setOnClickListener(this);
fab_trash = (FloatingActionButton) findViewById(R.id.fab_trash);
fab_trash.setOnClickListener(this);
fab_tag = (FloatingActionButton) findViewById(R.id.fab_tag);
fab_tag.setOnClickListener(this);
fab_memo = (FloatingActionButton) findViewById(R.id.fab_memo);
fab_memo.setOnClickListener(this);
fab_new_memo = (FloatingActionButton) findViewById(R.id.fab_new_memo);
fab_new_memo.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()){
case R.id.fab:
toggleMenu();
break;
case R.id.fab_setting:
changeFragment(3);
break;
case R.id.fab_trash:
changeFragment(2);
break;
case R.id.fab_tag:
changeFragment(1);
break;
case R.id.fab_memo:
changeFragment(0);
break;
case R.id.fab_new_memo:
newMemo();
break;
}
}
그런데 이러한 코드량만 늘어나는 반복적이고 소모적인 코드를
자바의 골뱅이 주석(Annotation) 을 이용하여 깔끔하고 편리하게
정리해 주는 라이브러리가 바로 버터나이프(Butter Knife)인 것이다.
저 위 주소에 가보면 소개부터 사용법, 빌드, 라이선스까지 잘 나와있다.
한번 가서 읽어보고 사용해 보길 권장한다.
암튼...
버튼이든 뭐든 일단 변수를 선언하고, findView 로 찾아서 변수에 대입해주고,
대입한 변수를 가지고 onClick 이벤트를 걸어주고
액티비티는 onClick 을 implement 해주고
거기서 클릭한 view 에 따라 분기를 해주고...
이런 노가다들을 좀 깔끔하게 정리를 해준다고 보면 되는데
(물론 그게 다는 아니다. 대표적인 기능을 예로 드는 것이다.)
버터나이프를 적용하면 아래와 같이 바뀐다.
public class MainActivity extends FragmentActivity {
@BindView(R.id.fab) FloatingActionButton fab;
@BindView(R.id.fab_setting) FloatingActionButton fab_setting;
@BindView(R.id.fab_trash) FloatingActionButton fab_trash;
@BindView(R.id.fab_tag) FloatingActionButton fab_tag;
@BindView(R.id.fab_memo) FloatingActionButton fab_memo;
@BindView(R.id.fab_new_memo) FloatingActionButton fab_new_memo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
}
@OnClick(R.id.fab)
void toggleMenu(){
}
@OnClick({R.id.fab_setting,R.id.fab_trash,R.id.fab_tag,R.id.fab_memo})
void fragmentChange(View view){
....
}
어떤가....사용성도 가독성도 훌륭해지지 않았는가!
클릭 이벤트만 있고 버튼 자체가 어디에 사용되지 않는다면 @BindView 조차 필요없다.
그냥 바로 @OnClick 어노테이션만 붙이면 클릭 리스너가 지정이 되는 것이다.
다만 oncreate 에서 빨간색으로 박스 쳐 놓은 저 코드를 꼭 넣어줘야 한다.
저거 깜빡하면 앱 죽어버린다. 깜빡하기 쉬우니 주의하자.
그럼 빌드에 어떻게 포함 시키느냐...
안드로이드 스튜디오를 쓴다면 디펜던시에 두줄만 추가하면 된다.
compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
저 위 주소링크로 들어가서 확인해보자. 어떤 기능들이 제공되는지
사용법은 어떻게 되는지.
간단하게 삽입하고 간단하게 사용할 수 있으니 지금이라도 사용해보자.
'안드로이드' 카테고리의 다른 글
[안드로이드] 빠른 메모 빠른 검색. 언제였더라 출시 (3) | 2017.03.01 |
---|---|
[안드로이드] Notification 영역에 알림 표시하기 (0) | 2017.02.21 |
[안드로이드] 안드로이드 스튜디오 자동 임포트 (Android studio auto Import) (0) | 2017.02.01 |
[안드로이드] ZXing을 이용하여 간단하게 바코드 이미지 생성하기 (0) | 2017.01.26 |
[안드로이드] TextView 글자 중간에 색깔 넣기 (0) | 2017.01.20 |