ButterKnife

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;
}

测试截图:
在这里插入图片描述

@OnItemSelected
@OnPageChange
@Optional
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值