Spatula is a very simple View and Click binder using Java annotations.
ButterKnives are infinitely sharper than Spatulas...
We all love Square's stuff, but ButterKnife started taking itself too seriously when it demanded 4 lines and a plugin in my module's gradle. Thus, Spatula - a super simple runtime annotation processor for binding Views, OnClickListeners, and click methods. Spatula is intended to be super simple, super lightweight, super easy to use or modify, and super easy to read. It's not trying to solve the most important problems, and it's not the most performant version of this functionality.
Unlike ButterKnife, Spatula is able to decorate private
fields.
There are 2 binding annoations, both take a resource ID:
@BindView(R.id.whatever)
@OnClick(R.id.whatever)
The first works on any View
reference, the second works on a View.OnClickListener
or a method that takes a single View
parameter.
To process, use any of the static bind
methods.
Spatula.bind(someActivityOrViewGroup);
It might look like this in an application:
public class MyActivity extends Activity {
// bind a view
@BindView(R.id.button_go)
private Button mButtonGo;
public void onCreate(Bundle b){
super.onCreate(b);
Spatula.bind(this);
mButtonGo.setText("Works!");
}
// bind a listener
@OnClick(R.id.button_listener)
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(getClass().getSimpleName(), "mOnClickListener");
}
}
// bind a method
@OnClick(R.id.button_method)
private void onClickMethod(View view) {
Log.d(getClass().getSimpleName(), "onClickMethod");
}
}
##Installation Add it to your gradle:
compile 'com.qozix:spatula:1.3'
If you're minifying, add these rules to proguard-rules.pro
-keep class com.qozix.spatula.** { *; }
-keep interface com.qozix.spatula.** { *; }
-dontwarn com.qozix.spatula.**
-keepclassmembers class * {
@com.qozix.spatula.OnClick *;
}
- Yep, this this uses runtime annotation processing, which is going to be technically much slower than compile time using the APT plugin. That said, you're still probably looking at an average of 0 to 1 milliseconds for a medium-sized instance with several bindings.
- Yep,
allmost of the restrictions of ButterKnife apply (and probably more). - We get around restricted access members by temporarily setting them accessible, updating, then setting them back (yep, ick!)