ButterKnife
配置
app的build.gradle中添加依赖
implementation 'com.jakewharton:butterknife:10.2.3'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.3'
初始化
在Activity的OnCreate()里面的setContentView(@LayoutRes int layoutResID)之后
ButterKnife.bind(this);
13个绑定资源
@BindView
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
java代码:
@BindView(R.id.tv)
TextView textView;
textView.setText("测试@BindView");
测试截图:
@BindViews
UI页面的 xml代码:
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
java代码:
@BindViews({R.id.tv1,R.id.tv2,R.id.tv3})
List<TextView> textViews;
for(TextView textView:textViews){
textView.setText("测试@BindViews:"+textView.getId());
}
测试截图:
@BindString
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
资源文件的 xml代码:
<string name="app_name">ButterKnife</string>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindString(R.string.app_name)
String string;
textView.setText(string);
测试截图:
@BindArray
UI页面的 xml代码:
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tv3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
资源文件的 xml代码:
<array name="tv_array">
<item>TextView1</item>
<item>TextView2</item>
<item>TextView3</item>
</array>
java代码:
@BindViews({R.id.tv1,R.id.tv2,R.id.tv3})
List<TextView> textViews;
@BindArray(R.array.tv_array)
String [] strings;
for(int i=0;i<strings.length;i++){
textViews.get(i).setText(strings[i]);
}
测试截图:
@BindInt
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
资源文件的 xml代码:
<integer name="num">666</integer>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindInt(R.integer.num)
int intNum;
textView.setText(""+intNum);
测试截图:
@BindFloat
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
资源文件的 xml代码:
<item name="float_num" type="dimen" format="float">5.5</item>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindFloat(R.dimen.float_num)
float aFloat;
textView.setText(""+aFloat);
测试截图:
@BindBool
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
资源文件的 xml代码:
<bool name="tv_bool">true</bool>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindBool(R.bool.tv_bool)
boolean aBoolean;
if (aBoolean){
textView.setText("测试@BindBool");
}
测试截图:
@BindColor
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试@BindColor"/>
资源文件的 xml代码:
<color name="purple_200">#FFBB86FC</color>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindColor(R.color.purple_200)
int color;
textView.setTextColor(color);
测试截图:
@BindDimen
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试@BindDimen"/>
资源文件的 xml代码:
<dimen name="text_size">30px</dimen>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindDimen(R.dimen.text_size)
int anInt;
textView.setTextSize(anInt);
测试截图:
@BindFont
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="测试@BindFont"/>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindFont(R.font.text_fond)
Typeface typeface;
textView.setTypeface(typeface);
字体资源文件(ttf文件):
测试截图:
@BindDrawable
UI页面的 xml代码:
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
java代码:
@BindView(R.id.image)
ImageView imageView;
@BindDrawable(R.drawable.ic_launcher_background)
Drawable drawable;
imageView.setImageDrawable(drawable);
Drawable资源文件:
测试截图:
@BindBitmap
UI页面的 xml代码:
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
java代码:
@BindView(R.id.image)
ImageView imageView;
@BindBitmap(R.drawable.logo)
Bitmap loge;
imageView.setImageBitmap(loge);
Drawable资源文件:
测试截图:
@BindAnim
UI页面的 xml代码:
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
anim资源文件(anim_gif.xml)的 xml代码:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="0"
android:toXDelta="320"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="2000"/>
</set>
java代码:
@BindView(R.id.image)
ImageView imageView;
@BindBitmap(R.drawable.logo)
Bitmap loge;
@BindAnim(R.anim.anim_gif)
Animation fadeIn;
imageView.setImageBitmap(loge);
imageView.setAnimation(fadeIn);
测试截图:
12个监听事件
@OnClick
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnClick"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击"/>
java代码:
@BindView(R.id.tv)
TextView textView;
@OnClick(R.id.btn)
void OnClick(){
textView.setText("点击成功!");
}
测试截图:
@OnLongClick
上面代码加上如下java代码:
@OnLongClick(R.id.btn)
void OnLongClick(){
textView.setText("长按成功!");
}
测试截图:
@OnTouch
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnTouch"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击"/>
java代码:
@BindView(R.id.tv)
TextView textView;
@OnTouch(R.id.btn)
boolean onTouch(MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
textView.setText("按下");
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
textView.setText("松开");
}
return false;
}
测试截图:
@OnCheckedChanged
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnCheckedChanged"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:id="@+id/rd1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="单选A"/>
<RadioButton
android:id="@+id/rd2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="单选B"/>
</RadioGroup>
java代码:
@BindView(R.id.tv)
TextView textView;
@OnCheckedChanged({R.id.rd1, R.id.rd2})
void onChecked(RadioButton radioButton, boolean checked) {
if (checked) {
switch (radioButton.getId()) {
case R.id.rd1:
textView.setText("选中A");
break;
case R.id.rd2:
textView.setText("选中B");
}
}
}
测试截图:
@OnEditorAction
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnEditorAction"/>
<EditText
android:id="@+id/ed"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindView(R.id.ed)
EditText editText;
@OnEditorAction(R.id.ed)
boolean onEditorAction(KeyEvent key){
textView.setText(editText.getText().toString());
return true;
}
测试截图:
@OnTextChanged
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnTextChanged"/>
<EditText
android:id="@+id/ed"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindView(R.id.ed)
EditText editText;
@OnTextChanged(R.id.ed)
void onTextChanged(CharSequence text) {
textView.setText(text.toString());
}
测试截图:
@OnFocusChange
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnFocusChange"/>
<EditText
android:id="@+id/ed"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="编辑框A"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="编辑框B"/>
java代码:
@BindView(R.id.tv)
TextView textView;
@BindView(R.id.ed)
EditText editText;
@OnFocusChange(R.id.ed)
void onFocusChanged(boolean focused) {
if (focused)
textView.setText("编辑框A获取焦点");
else
textView.setText("编辑框A失去焦点");
}
测试截图:
@OnItemClick
UI页面的 xml代码:
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试@OnItemClick"/>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
Item的 xml代码:
<TextView
android:id="@+id/item_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
java代码:
@BindView(R.id.tv)
TextView textView;
private ListView listView;
private List<User> users;
private Context mContext;
private UserAdapter userAdapter=null;
private int sum=1;
void initData(){
users=new ArrayList<>();
users.add(new User("张三"));
users.add(new User("李四"));
}
@OnItemClick(R.id.lv)
void onItemClick(int position) {
textView.setText(sum+users.get(position).getName());
sum++;
}
ButterKnife.bind(this);
mContext=MainActivity.this;
initData();
listView=findViewById(R.id.lv);
userAdapter=new UserAdapter(users,mContext);
listView.setAdapter(userAdapter);
package com.example.butterknife;
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.example.butterknife;
public class UserAdapter extends BaseAdapter {
private List<User> users;
private Context mContext;
public UserAdapter(List<User> users, Context mContext) {
this.users = users;
this.mContext = mContext;
}
@Override
public int getCount() {
return users.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView= LayoutInflater.from(mContext).inflate(R.layout.lv_item,parent,false);
TextView textView = convertView.findViewById(R.id.item_tv);
textView.setText(users.get(position).getName());
return convertView;
}
}
测试截图:
@OnItemLongClick
在上面代码中加入以下代码:
@OnItemLongClick(R.id.lv)
boolean onItemLongClick(int position) {
textView.setText(users.get(position).getName());
return true;
}
测试截图: