'버터나이프'에 해당되는 글 2건
- 2015.05.19 [plugins]AndroidStuodio에서 Butterknife사용시 꼭 필요한 plugin 'Zelezny'
- 2015.01.13 [오픈 소스 라이브러리 01] Butter Knife (버터나이프) 2
오늘은 코드보다는 안드로이드 스튜디오에서 사용할 수 있는 유용한 plugin을 하나 소개하려고 한다. 예전에 안드로이드 라이브러리중 ButterKnife를 소개한 적이 있다. 오늘 소개할 plugin은 ButterKnife 라이브러리 사용시 같이 사용하면 코딩을 '두배'는 더 쉽고 편하게 하도록 도와준다. plugin의 이름은 'Android ButterKnife Zelezny'이다.
우선 플러그인을 다운 받기 위해서는, File -> Setting -> plugins 를 선택해도 되고 그냥 shift키를 두번누른 후 검색어에 'plugins'를 입력하면 아랫부분에 선택할 수 있다.plugins를 선택하면 아래와 같은 화면이 나온다.
이 화면에서는 검색해도 나오지 않고 아래쪽에 보이는 버튼 중 가운데 버튼인 'Browse repositories..'를 선택해야 한다.
선택하게되면 위와같은 화면이 나오는데 이때 검색 창에 'ButterKnife'를 입력하면 제일 위에 'Android ButterKnife Zelezny'가 뜨는 것을 확인할 수 있다. 초록색 Install plugin 버튼을 누르고 안드로이드 스튜디오를 재시작 하면 설치과정은 쉽게 끝이난다. 사용법도 간편하다.
위와 같이 레이아웃을 set해줄때, 해당레이아웃에 커서를 옮긴후 generate을 실행시켜주면 된다.(윈도우에서는 alt+insert, 맥에서는 command + n) 그러면 생성할 수 있는 여러 함수들 리스트가 나오는데 그중에 'generate butterKnife injection..'을 선택하면 된다.(버터나이프 마스코트가 왼편에 있다)
그럼 위와 같은 화면이 뜨고 확인을 누르면,
ButterKnife를 통해 내가 레이아웃에 생성해둔 뷰들이 한번에 inject되는것을 볼 수 있다.
알아둘 점은 레이아웃에 생성한 모든 뷰를 inject하는 것이 아니라 그 중 id값을 추가해 준 뷰들만 inject한다. 또한 adapter에서 레이아웃을 inflate할때, 아래쪽에 있는 'create ViewHolder' 에 체크하면 ViewHolder Pattern에 사용하는 ViewHolder도 한번에 만들어 준다. 꼭 사용해서 조금 더 편한 코딩을 하길 바란다.
'프로그래밍 이야기 > 안드로이드' 카테고리의 다른 글
[pattern 04] 빌더 패턴 (1) | 2015.01.27 |
---|---|
[pattern 03] 자바빈 패턴 (0) | 2015.01.26 |
[pattern 02] 점층적 생성자 패턴 (0) | 2015.01.25 |
[pattern 01] ViewHolder pattern - (2) (0) | 2015.01.17 |
[pattern 01] ViewHolder pattern- (1) (1) | 2015.01.15 |
여러 View 들을 inject할때 도움을 주는 Butter knife 라이브러리
안드로이드를 공부 할 수록 존경하게 되는 와튼 형님이 만든 라이브러리지만 사실 Butter knife를 사용해야 하는 필요성을 못 느끼고 있었다. 무조건 오픈소스 이용해서 쉽게, 쉽게 코딩하지말고 원리는 알고 이용하라는 선배들의 글을 본 후 더욱 이런 라이브러리는 게으른 사람들만 이용한다고 생각했다. 하지만 어느 순간 내가 Activity 에서 View를 적용할때 마다 불필요한 '노가다 코딩'을 반복한다는 느낌이 들었다. 예를 들어,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | private void setUI() { mButtonBack = (Button) findViewById(R.id.btn_back); mButtonHome = (Button) findViewById(R.id.btn_home); mButtonEnter = (Button) findViewById(R.id.btn_enter); mButtonRightArrow = (Button) findViewById(R.id.btn_right_arrow); mButtonLeftArrow = (Button) findViewById(R.id.btn_left_arrow); mButtonUpArrow = (Button) findViewById(R.id.btn_up_arrow); mButtonDownArrow = (Button) findViewById(R.id.btn_down_arrow); } private void setEventListener() { mButtonBack.setOnClickListener(clickListener); mButtonHome.setOnClickListener(clickListener); mButtonEnter.setOnClickListener(clickListener); mButtonRightArrow.setOnClickListener(clickListener); mButtonLeftArrow.setOnClickListener(clickListener); mButtonUpArrow.setOnClickListener(clickListener); mButtonDownArrow.setOnClickListener(clickListener); } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @InjectView(R.id.btn_back) Button mButtonBack; @InjectView(R.id.btn_home) Button mButtonHome; @InjectView(R.id.btn_enter) Button mButtonEnter; @InjectView(R.id.btn_right_arrow) Button mButtonRightArrow; @InjectView(R.id.btn_left_arrow) Button mButtonLeftArrow; @InjectView(R.id.btn_up_arrow) Button mButtonUpArrow; @InjectView(R.id.btn_down_arrow) Button mButtonDownArrow private void setEventListener() { mButtonBack.setOnClickListener(clickListener); mButtonHome.setOnClickListener(clickListener); mButtonEnter.setOnClickListener(clickListener); mButtonRightArrow.setOnClickListener(clickListener); mButtonLeftArrow.setOnClickListener(clickListener); mButtonUpArrow.setOnClickListener(clickListener); mButtonDownArrow.setOnClickListener(clickListener); } | cs |
위의 코드와 같이 멤버변수를 선언과 동시에 해당 View를 연결할 수 있다. 나아가서 만약 Butter knife에서 제공하는 @OnClick 어노테이션을 사용하면 리스너 injection도 가능한데 이를 이용하면 멤버변수 선언을 포함한 위의 모든 코드 자체를 사용할 필요가 없고
1 2 3 4 5 6 7 8 9 10 11 | @OnClick({R.id.btn_back,R.id.btn_home,R.id.btn_enter, R.id.btn_right_arrow,R.id.btn_left_arrow, R.id.btn_up_arrow, R.id.btn_down_arrow}) public void onButtonClick(View view) { switch (view.getId()) { case R.id.btn_back: ... } } | cs |
위의 코드와 같이 바로 해당 클릭 리스너에 대한 구현만 해주면 된다.이런 방법은 코딩작업의 편의성도 좋지만 가독성 면에서도 나은 방법이라고 생각한다.
그럼 Butter Knife 라이브러리에 대한 사용 방법에 대해서 알아보자. 우선 설치법은, 이클립스 사용자일 경우
http://jakewharton.github.io/butterknife/
위의 사이트에서 JAR 파일을 다운받은후 적용을 하고 안드로이드 스튜디오 사용자들은 app내에 build.gradle의 dependencies 에
compile 'com.jakewharton:butterknife:6.0.0'
위의 컴파일 주소만 추가해 주면 된다. 라이브러리 설치가 끝났으면 사용법에 대해서 알아보자. 우선 Activity를 상속 받았을 경우
1 2 3 4 5 6 7 | @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this); // TODO Use "injected" views... } | cs |
위와 같이 onCreate()에서 ButterKnife.inject(this)라는 명령을 통해 inject할 수 있다. 만약 activity가 아닌 fragment 라면
1 2 3 4 5 6 7 8 9 10 | @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.inject(this, view); // TODO Use "injected" views... return view; } | cs |
위와 같이 onCreateView()에서 ButterKnife.inject(this, view)라는 명령어를 통해 inject한다. 또한 adapter에서 ViewHolder pattern 을 사용할때에도
1 2 3 4 5 6 7 8 | static class ViewHolder { @InjectView(R.id.title) TextView name; @InjectView(R.id.job_title) TextView jobTitle; public ViewHolder(View view) { ButterKnife.inject(this, view); } } | cs |
처럼 사용할 수 있다.apply()메소드에 대해서는 다음에 기회가 되면 추가적으로 살펴보기로 하고 리스너 injection을 살펴보면 아까 위에서 예제에서 보여준것 처럼 @OnClick()어노테이션으로 injection을 할 때 {}안에 여러개의 id를 동시에 작용하게 할 수도 있지만
1 2 3 4 5 | @OnClick(R.id.enter) public void onButtonClick() { // TODO } | cs |
처럼 하나의 id에서만 적용할 수 있다. 여기서 참고할 사항은 메소드의 이름은 내가 정해 줄 수 있지만 만약 메소드에 Parameter값을 넣을 경우 반드시 해당 id가 속한 view 의 parameter가 필요하다. 예를 들어 위의 코드에서 R.id.enter는 버튼의 id인데 메소드 onButtonClick(ImageView img)와 같이 정의하면 런타임시 에러가 발생한다.
'프로그래밍 이야기 > 안드로이드' 카테고리의 다른 글
[pattern 03] 자바빈 패턴 (0) | 2015.01.26 |
---|---|
[pattern 02] 점층적 생성자 패턴 (0) | 2015.01.25 |
[pattern 01] ViewHolder pattern - (2) (0) | 2015.01.17 |
[pattern 01] ViewHolder pattern- (1) (1) | 2015.01.15 |
resource 동적 변경하기 ( 영어, 일본어 등) (2) | 2015.01.13 |