Android ButterKnife使用
来源:互联网 发布:足球数据哪里有最全的 编辑:程序博客网 时间:2024/05/21 15:31
Butter Knife:Android的字段和方法绑定视图使用注解处理为您生成样板代码。
- 消除findViewById调用使用@FindView字段。
- 使用@FindViews集团多个视图列表。操作都是用行动,setter方法或属性。
- 消除匿名内部类与@OnClick听众通过注释方法等等。
写这篇blog的时候我用的是Butter Knife5.1.1版本,现在最新的Butter Knife应该是6.1.0版本。推荐大家下载6.1.0的JAR。
Activity中使用:
第一步:将依赖包导入Dependencies中
build.gradle中
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.jakewharton:butterknife:5.1.1'}
第二步,布局activity_main.xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="ButterKnife模拟用户登录界面" android:textSize="22sp" android:layout_centerHorizontal="true" android:gravity="center" android:layout_marginTop="72dp"/> <EditText android:id="@+id/et_name" android:hint="请输入用户名" android:layout_below="@id/tv_title" android:layout_marginTop="50dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="6dp" /> <EditText android:id="@+id/et_pwd" android:hint="请输入密码" android:layout_below="@id/et_name" android:layout_marginTop="50dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="6dp" /> <Button android:id="@+id/btn_submit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="SUBMIT" android:layout_below="@id/et_pwd" android:layout_centerHorizontal="true" android:layout_marginTop="50dp"/></RelativeLayout>
第三步:MainActivit中,使用注解
public class MainActivity extends Activity { @InjectView(R.id.et_name) EditText nameEditText; @InjectView(R.id.et_pwd) EditText pwdEditText; @OnClick(R.id.btn_submit) void submmit(){ if(nameEditText.getText().toString().equals("420733721") && pwdEditText.getText().toString().equals("123456")){ Toast.makeText(MainActivity.this,getString(R.string.login_sucess),Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this,getString(R.string.login_faild),Toast.LENGTH_SHORT).show(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化ButterKnife ButterKnife.inject(this); }}
Fragment中使用
public class AFragment extends Fragment { @InjectView(R.id.tv_f) TextView textView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.f_a,container,false); ButterKnife.inject(this,view); textView.setText("This is Fragment A !"); return view; }}
Adapter中的使用
/** * 适配器 */ public class MyAdapter extends BaseAdapter{ private Context mContext; private String[] strings; private LayoutInflater mInflater; public MyAdapter(String[] strings, Context mContext) { this.strings = strings; this.mContext = mContext; mInflater=LayoutInflater.from(mContext); } @Override public int getCount() { return str.length; } @Override public Object getItem(int i) { return str[i]; } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder; if(view==null){ view=mInflater.inflate(R.layout.item_list,viewGroup,false); holder=new ViewHolder(view); view.setTag(holder); }else { holder= (ViewHolder) view.getTag(); } holder.itemTextView.setText(strings[i]); return view; } class ViewHolder{ @InjectView(R.id.item_tv) TextView itemTextView; public ViewHolder(View view){ ButterKnife.inject(this,view); } } }
总结:
事件注入
点击事件注入
@OnClick(R.id.submit)public void sayHi(Button button) { button.setText("Hello!");}
多个控件具有相同的事件
@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(); }}
重置注入
public class FancyFragment extends Fragment { @InjectView(R.id.button1) Button button1; @InjectView(R.id.button2) Button button2; @Override View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fancy_fragment, container, false); ButterKnife.inject(this, view); // TODO Use "injected" views... return view; } @Override void onDestroyView() { super.onDestroyView(); ButterKnife.reset(this); }}
可选注入
默认情况下@InjectView和@OnClick注入是必选的,如果view未找到将出现异常。为了避免出现异常,添加一个@Optional注解
其它
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);
混淆
为避免混淆的时代码被移除,所以要在proguard-project.txt中添加如下代码避免混淆
-dontwarn butterknife.internal.**-keep class **$$ViewInjector { *; }-keepnames class * { @butterknife.InjectView *;}
0 0
- Android ButterKnife使用
- Android ButterKnife 使用
- Android Butterknife的使用
- Android ButterKnife使用总结
- Android ButterKnife的使用
- Android-butterknife 简单使用
- Android之butterknife使用
- Android ButterKnife使用
- Android ButterKnife的使用
- Android ButterKnife配置使用
- android中Butterknife使用
- Android ----- butterknife框架使用
- android studio使用ButterKnife
- Android:使用butterknife
- Android Butterknife使用
- Android Butterknife 使用
- Android ButterKnife 的使用
- Android butterknife的使用
- jquery中push()的用法
- MongoDB 在mac上安装
- Unity3d中摄像机控制脚本实现
- C# 当double数值较大且小数位过多时转化成字符串并保留小数位
- 在from框中显示时间 时:分:秒
- Android ButterKnife使用
- 重新布局
- VC使用CRT调试功能检测内存泄漏
- stm32.cube(九)——HAL.DMA
- 英文地址写法
- Android 不同app之间调用activity,通过action实现
- 编程时,容易因为粗心而引发的错误
- c++中static总结
- 分享图片+文字到微信朋友圈