Android
버터 칼
수색…
소개
Butterknife는 주석을 사용하여 우리를위한 상용구 코드를 생성하는 뷰 바인딩 도구입니다. 이 도구는 Square의 Jake Wharton이 개발했으며 뷰를 처리 할 때 findViewById(R.id.view)
와 같은 반복적 인 코드 입력을 저장하는 데 기본적으로 사용되므로 코드가 훨씬 깨끗 해집니다.
명확히 말하면 Butterknife는 의존성 삽입 라이브러리 가 아닙니다 . Butterknife는 컴파일 할 때 코드를 삽입합니다. Android Annotations에서 수행 한 작업과 매우 유사합니다.
비고
버터 칼
어노테이션 처리를 사용하여 상용구 코드를 생성하는 Android보기 용 필드 및 메소드 바인딩.
- 필드에서 @BindView를 사용하여 findViewById 호출을 제거하십시오.
- 목록 또는 배열에서 여러보기를 그룹화합니다. 작업, 설정자 또는 속성을 사용하여 모든 작업을 한 번에 수행하십시오.
- @OnClick 및 기타 메소드에 주석을 달아 익명의 내부 클래스를 제거합니다.
- 필드에서 자원 주석을 사용하여 자원 조회를 제거하십시오.
자세한 정보 : http://jakewharton.github.io/butterknife/
특허
저작권 2013 Jake Wharton
Apache 라이센스, 버전 2.0 (이하 "라이센스")에 의거하여 라이센스가 부여됩니다. 귀하는 라이센스를 준수하는 경우를 제외하고는이 파일을 사용할 수 없습니다. 귀하는 라이센스의 사본을
http://www.apache.org/licenses/LICENSE-2.0
관련법에 의해 요구되거나 서면으로 동의하지 않는 한, 라이센스에 따라 배포 된 소프트웨어는 명시 적 또는 묵시적으로 어떠한 종류의 보증이나 조건없이 "있는 그대로"의 상태로 배포됩니다. 라이선스에 따른 사용 권한 및 제한 사항을 설명하는 특정 언어에 대한 라이선스를 참조하십시오.
프로젝트에서 ButterKnife 구성하기
android-apt
플러그인을 포함하도록 프로젝트 레벨 build.gradle
을 구성하십시오.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
}
그런 다음 모듈 수준 build.gradle
에 android-apt
plugin을 적용하고 ButterKnife 종속성을 추가합니다.
apply plugin: 'android-apt'
android {
...
}
dependencies {
compile 'com.jakewharton:butterknife:8.5.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
}
참고 : 버전 2.2.0 이상의 새로운 Jack 컴파일러를 사용하는 경우 android-apt
플러그인이 필요하지 않으며 대신 컴파일러 종속성을 선언 할 때 apt를 annotationProcessor
바꿀 수 있습니다.
당신이 그들을 바인딩에 대해 잊지 말아야 ButterKnife 주석을 사용하려면 onCreate()
당신의 활동의 onCreateView()
당신의 조각을 :
class ExampleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Binding annotations
ButterKnife.bind(this);
// ...
}
}
// Or
class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(getContentView(), container, false);
// Binding annotations
ButterKnife.bind(this, view);
// ...
return view;
}
}
개발 버전 의 스냅 샷 은 Sonatype의 스냅 샷 저장소 에서 사용할 수 있습니다.
다음은 라이브러리 프로젝트에서 ButterKnife를 사용하기 위해 취해야 할 추가 단계입니다.
라이브러리 프로젝트에서 ButterKnife를 사용하려면 프로젝트 레벨 build.gradle
플러그인을 추가하십시오.
buildscript {
dependencies {
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1'
}
}
... 그런 다음 라이브러리 레벨 build.gradle
맨 위에 다음 행을 추가하여 모듈에 적용하십시오.
apply plugin: 'com.android.library'
// ...
apply plugin: 'com.jakewharton.butterknife'
이제 모든 ButterKnife 주석 내에서 R
대신 R2
를 사용해야합니다.
class ExampleActivity extends Activity {
// Bind xml resource to their View
@BindView(R2.id.user) EditText username;
@BindView(R2.id.pass) EditText password;
// Binding resources from drawable,strings,dimens,colors
@BindString(R.string.choose) String choose;
@BindDrawable(R.drawable.send) Drawable send;
@BindColor(R.color.cyan) int cyan;
@BindDimen(R.dimen.margin) Float generalMargin;
// Listeners
@OnClick(R.id.submit)
public void submit(View view) {
// TODO submit data to server...
}
// bind with butterknife in onCreate
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
// TODO continue
}
}
ButterKnife를 사용하여 뷰 바인딩
우리는 @BindView
와 Butter Knife의 뷰 ID로 필드에 주석을 달아 레이아웃에서 해당 뷰를 찾아 자동 캐스팅 할 수 있습니다.
바인딩 뷰
활동의 뷰 바인딩
class ExampleActivity extends Activity {
@BindView(R.id.title) TextView title;
@BindView(R.id.subtitle) TextView subtitle;
@BindView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
}
}
조각의 뷰 바인딩
public class FancyFragment extends Fragment {
@BindView(R.id.button1) Button button1;
@BindView(R.id.button2) Button button2;
private Unbinder unbinder;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
unbinder = ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
// in fragments or non activity bindings we need to unbind the binding when view is about to be destroyed
@Override
public void onDestroy() {
super.onDestroy();
unbinder.unbind();
}
}
대화 상자에서보기 바인딩
ButterKnife.findById
를 사용하여보기, 활동 또는 대화 상자에서보기를 찾을 수 있습니다. 제네릭을 사용하여 반환 유형을 추론하고 자동으로 캐스트를 수행합니다.
View view = LayoutInflater.from(context).inflate(R.layout.thing, null);
TextView firstName = ButterKnife.findById(view, R.id.first_name);
TextView lastName = ButterKnife.findById(view, R.id.last_name);
ImageView photo = ButterKnife.findById(view, R.id.photo);
ViewHolder의 뷰 바인딩
static class ViewHolder {
@BindView(R.id.title) TextView name;
@BindView(R.id.job_title) TextView jobTitle;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
바인딩 리소스
바인딩 뷰에 유용함은 물론, ButterKnife를 사용하여 strings.xml
, drawables.xml
, colors.xml
, dimens.xml
등에서 정의 된 것과 같은 리소스를 바인딩 할 수도 있습니다.
public class ExampleActivity extends Activity {
@BindString(R.string.title) String title;
@BindDrawable(R.drawable.graphic) Drawable graphic;
@BindColor(R.color.red) int red; // int or ColorStateList field
@BindDimen(R.dimen.spacer) Float spacer; // int (for pixel size) or float (for exact value) field
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
ButterKnife.bind(this);
}
}
보기 목록 바인딩
여러 뷰를 List 또는 배열로 그룹화 할 수 있습니다. 이는 한 번에 여러보기에서 하나의 작업을 수행해야 할 때 매우 유용합니다.
@BindViews({ R.id.first_name, R.id.middle_name, R.id.last_name })
List<EditText> nameViews;
//The apply method allows you to act on all the views in a list at once.
ButterKnife.apply(nameViews, DISABLE);
ButterKnife.apply(nameViews, ENABLED, false);
//We can use Action and Setter interfaces allow specifying simple behavior.
static final ButterKnife.Action<View> DISABLE = new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setEnabled(false);
}
};
static final ButterKnife.Setter<View, Boolean> ENABLED = new ButterKnife.Setter<View, Boolean>() {
@Override public void set(View view, Boolean value, int index) {
view.setEnabled(value);
}
};
선택적 바인딩
기본적으로 @Bind
및 Listener 바인딩이 필요합니다. 타겟 뷰가 발견되지 않는 경우는 예외가 throw됩니다. 그러나 뷰가 있을지 확실하지 않은 경우 필드에 @Nullable
주석을 추가하거나 @Optional
주석을 메서드에 추가하여이 동작을 억제하고 선택적 바인딩을 만들 수 있습니다.
@Nullable
@BindView(R.id.might_not_be_there) TextView mightNotBeThere;
@Optional
@OnClick(R.id.maybe_missing)
void onMaybeMissingClicked() {
// TODO ...
}
ButterKnife를 사용하여 바인딩 청취자
OnClick Listener :
@OnClick(R.id.login)
public void login(View view) {
// Additional logic
}
listener 메서드에 대한 모든 인수는 선택 사항입니다.
@OnClick(R.id.login)
public void login() {
// Additional logic
}
특정 유형이 자동으로 형 변환됩니다.
@OnClick(R.id.submit)
public void sayHi(Button button) {
button.setText("Hello!");
}
공통 이벤트 처리를위한 단일 바인딩의 다중 ID :
@OnClick({ R.id.door1, R.id.door2, R.id.door3 })
public void pickDoor(DoorView door) {
if (door.hasPrizeBehind()) {
Toast.makeText(this, "You win!", LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Try again", LENGTH_SHORT).show();
}
}
사용자 지정보기는 ID를 지정하지 않고 자체 수신기에 바인딩 할 수 있습니다.
public class CustomButton extends Button {
@OnClick
public void onClick() {
// TODO
}
}
ButterKnife의 뷰 바인딩 해제
조각은 활동보다 뷰 수명주기가 다릅니다. onCreateView에서 단편을 바인딩 할 때 onDestroyView에서 뷰를 null로 설정하십시오. Butter Knife는 바인드를 호출 할 때 Unbinder 인스턴스를 반환합니다. 해당 수명주기 콜백에서 unbind 메소드를 호출하십시오.
예 :
public class MyFragment extends Fragment {
@BindView(R.id.textView) TextView textView;
@BindView(R.id.button) Button button;
private Unbinder unbinder;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
unbinder = ButterKnife.bind(this, view);
// TODO Use fields...
return view;
}
@Override public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
}
참고 : onDestroyView ()에서 unbind ()를 호출하는 것은 필수 사항은 아니지만 앱에 큰 백 스택이있는 경우 메모리가 상당히 절약되므로 권장됩니다.
Android Studio 버터 나이프 플러그인
Android ButterKnife Zelezny
액티비티 / 프래그먼트 / 어댑터의 선택된 레이아웃 XML에서 ButterKnife 삽입을 생성하는 플러그인입니다.
참고 : 생성 메뉴에 Butterknife 인젝터 옵션이 포함되어 있지 않으면 your_xml_layou (R.layout.your_xml_layou
)를 마우스 오른쪽 버튼으로 클릭해야합니다.
링크 : Jetbrains 플러그인 Android ButterKnife Zelezny