Android ButterKnife的简单例子

来源:互联网 发布:淘宝无线转换工具 编辑:程序博客网 时间:2024/05/01 11:07

ButterKnife是一个非常受欢迎的开源框架,ButterKnife官方git.

它实现了Android View的字段和方法绑定,它使用java注解(annotation)为使用者生成样板代码
1. 通过在字段上使用@BindView消除findViewById调用
2. 可以把多个view分组,使用ButterKnife的Action,Setter或Property接口一次操作所有这些view。
3. 通过使用@OnClick和其他方法注释方法来消除Listener的匿名内部类。
4. 通过在字段上使用资源注释消除资源查找(getString(R.string.xx))。

接下来我将用一个例子来让大家熟悉一下ButterKnife的使用:
首先我们在gradle中引入依赖库

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

项目的gradle

然后在module的gradle中加入

apply plugin: 'com.neenbedankt.android-apt'compile 'com.jakewharton:butterknife:8.4.0'    apt 'com.jakewharton:butterknife-compiler:8.4.0'

module

例子代码

public class ButterKnifeSampleActivity extends AppCompatActivity {    //等于textView1 = (TextView)findViewById(R.id.test_text_view1)    @BindView(R.id.test_text_view1)    TextView textView1;    @BindView(R.id.test_text_view2)    TextView textView2;    @BindView(R.id.show_btn)    Button showBtn;    @BindView(R.id.hide_btn)    Button hideBtn;    //等于helloStr = getString(R.string.hello_butterknife)    @BindString(R.string.hello_butterknife)    String helloStr;    //等于showBtn.setOnClickListener(new OnClickListener())    @OnClick(R.id.show_btn)    public void showViews() {        //显示textView1和textView2        show(textView1, textView2);    }    @OnClick(R.id.hide_btn)    public void hideViews() {        //隐藏textView1和textView2        hide(textView1, textView2);    }    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_navigation_view);        //和当前界面的view root绑定        ButterKnife.bind(this);        //给textView1和textView2设置text        setText(helloStr, textView1, textView2);        //property的使用,设置textView1的透明度        //Property<View, Float> property = View.ALPHA;        ButterKnife.apply(textView1, View.ALPHA, 0.0f);    }    //批量设置text    public static void setText(String value, TextView... views) {        if (views != null) {            ButterKnife.apply(views, SETTER_TEXT, value);        }    }    //批量隐藏view    public static void hide(View... views) {        if (views != null) {            ButterKnife.apply(Arrays.asList(views), ACTION_HIDE);        }    }    //批量显示view    public static void show(View... views) {        if (views != null) {            ButterKnife.apply(Arrays.asList(views), ACTION_SHOW);        }    }    //Action实现一:hide操作    private static ButterKnife.Action<View> ACTION_HIDE = new ButterKnife.Action<View>() {        @Override        public void apply(View view, int index) {            view.setVisibility(View.GONE);        }    };    //Action实现二:show操作    private static ButterKnife.Action<View> ACTION_SHOW = new ButterKnife.Action<View>() {        @Override        public void apply(View view, int index) {            view.setVisibility(View.VISIBLE);        }    };    //Setter实现一:设置文本    private static ButterKnife.Setter<TextView, String> SETTER_TEXT = new ButterKnife.Setter<TextView, String>() {        @Override        public void set(@NonNull TextView view, String value, int index) {            view.setText(value);        }    };}

布局代码如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/activity_navigation_view"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/test_text_view1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="test_text_view1" />    <TextView        android:id="@+id/test_text_view2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/test_text_view1"        android:text="test_text_view2" />    <Button        android:id="@+id/hide_btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/test_text_view2"    <Button        android:id="@+id/show_btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignBaseline="@+id/hide_btn"        android:layout_alignBottom="@+id/hide_btn"        android:layout_toEndOf="@+id/hide_btn"        android:layout_toRightOf="@+id/hide_btn"        android:text="show" /></RelativeLayout>
0 0
原创粉丝点击