厌烦了写findViewById 试试ButterKnife吧
先上官网
http://jakewharton.github.io/butterknife/ 和 https://github.com/JakeWharton/butterknife
配置开发环境
在代码开始之前 先要将库加入依赖
Eclipse
去官网手工下载 jar 包, 放到 libs目录 或者其他方式加入到 Build Path当中
Android Studio
GUI 操作的方式
菜单上 File -> Project Structure (或者直接点工具栏上的Project Structure) -> 左侧 Modules下的 app -> 右侧 Dependencies 标签页 -> +号 -> Library dependency 搜索 butterknife 选择 com.jakewharton:butterknife:8.4.0 然后 OK, 版本号会变 , 反正选择没有 -compiler 这种带尾巴的。
新的butterknife 增加了 annotationProcessor 这种方式无法添加, 所以最终还是要编辑 Gradle Script
编辑 Gradle Script的方式
打开 Module app的 build.gradle , 在dependencies 添加两行
dependencies { ... compile 'com.jakewharton:butterknife:8.4.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' ... }
省略号代表其他已有的 dependencies 。 添加之后 sync
启动ButterKnife
开发环境配好后, 编码开始
在 Activity中使用, 首先要启动butterknife , 在 onCreate里 setContentView 之后立即 ButterKnife.bind(this);
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); }
绑定View
是用@BindView 替代findViewById
public class MainActivity extends AppCompatActivity { @BindView(R.id.btnGet) Button mBtnGet; @BindView(R.id.tvResult) TextView mTvResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); mBtnGet.setText("do get"); } }
注意: 注解只能用在类成员上, 成员不能用 private 或 static 修饰, 不能用在方法中的局部变量上
绑定 资源
@BindString(R.string.app_name) String appName; @BindColor(R.color.colorPrimary) int colorPrimary; @BindBool(R.bool.bool_name) boolean boolName;
还支持更多类型,就不一一列举类
绑定 click 事件
不用声明 view 也不用setOnClickListener , 参数是可有可无的, 如果不使用,不写省事
@OnClick(R.id.btnPost) void doPost() { mTvResult.setText("do post done"); }
当然也可以像 onClickListener 一样带上参数
@OnClick(R.id.btnPost) void doPost(View view) { Button btnPost = (Button)view; mTvResult.setText("do post done " + btnPost.getText().toString()); }
还可以把强转都省了,直接在参数上使用要转的确切类型butterknife能帮你自动转型
@OnClick(R.id.btnPost) void doPost(Button btnPost) { mTvResult.setText("do post done " + btnPost.getText().toString()); }
发