一个页面有两个布局是否可以写两个butterknife 8.0.1.inject

android studio开发Activity切换动画以及ButterKnife注解简单应用
android studio开发Activity切换动画以及ButterKnife注解简单应用
[摘要:比来方才换到Android studio举行android开辟,很多多少没有逆,没有现实运用不可,必需现实操纵一遍才能够实正举行android studio上面举行开辟。现在写那个 小小的案例举行一个简略的]
最近刚刚换到Android studio进行android开发,好多不顺,不实际应用不行,必须实际操作一遍才可以真正进行android studio下面进行开发。目前写这个 小小的案例进行一个简单的实践。先上效果图:
实现的效果就是两个activity进行切换时候的动画,其实了解的话其实都非常简单,最近MIUI更新版本之后,现在MIUI的启动界面也采用了有底部向上部平移的动画。
整个界面非常简单,两个activity,一个主界面,另一个other界面,启动 销毁进行动画的显示。
xml的布局文件也是简单,就不贴出来了。下面先给出主界面的代码:
public class MainActivity extends Activity {
@Bind(R.id.animation_sp)
Spinner mAnimSp
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
ButterKnife.bind(this)
// 通过资源文件获取Spinner填充内容
String[] ls = getResources().getStringArray(R.array.anim_type)
List&String& list = new ArrayList&&()
// 把数组内容填充 到集合
for (String str:ls) {
list.add(str)
ArrayAdapter&String& animType = new ArrayAdapter&&(this,
android.R.layout.simple_spinner_item, list)
animType.setDropDownViewResource(android.
R.layout.simple_spinner_dropdown_item)
mAnimSp.setAdapter(animType)
mAnimSp.setSelection(0)
@OnClick(R.id.other_button)
void buttonclick(){
Intent intent = new Intent()
intent.setClass(MainActivity.this, OtherActivity.class)
startActivity(intent)
switch (mAnimSp.getSelectedItemPosition()) {
overridePendingTransition(R.anim.fade, R.anim.hold)
overridePendingTransition(R.anim.my_scale_action,
R.anim.my_alpha_action)
overridePendingTransition(R.anim.scale_rotate,
R.anim.my_alpha_action)
overridePendingTransition(R.anim.scale_translate_rotate,
R.anim.my_alpha_action)
overridePendingTransition(R.anim.scale_translate,
R.anim.my_alpha_action)
overridePendingTransition(R.anim.hyperspace_in,
R.anim.hyperspace_out)
overridePendingTransition(R.anim.push_left_in,
R.anim.push_left_out)
overridePendingTransition(R.anim.push_up_in,
R.anim.push_up_out)
overridePendingTransition(R.anim.slide_left,
R.anim.slide_right)
overridePendingTransition(R.anim.wave_scale,
R.anim.my_alpha_action)
overridePendingTransition(R.anim.zoom_enter,
R.anim.zoom_exit)
overridePendingTransition(R.anim.slide_up_in,
R.anim.slide_down_out)
protected void onDestroy() {
ButterKnife.unbind(this)
super.onDestroy()
代码比较简单,一个Spinner 填装字符串数据,一个button,button相应onclick事件。其中用到了ButterKnife注解,代码跟全部手写要简洁一些。稍后讲解ButterKnife注解的用法。
下面给出启动的otherActivity的代码:
import android.app.A
import android.os.B
import android.view.KeyE
import android.widget.TextV
import android.widget.T
import butterknife.B
import butterknife.ButterK
import butterknife.OnC
import butterknife.OnLongC
public class OtherActivity extends Activity {
@Bind(R.id.text)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.other);
ButterKnife.setDebug(true);
ButterKnife.bind(this);
@OnClick(R.id.text)
void click() {
Toast.makeText(this, "点击了onclick", Toast.LENGTH_LONG).show();
@OnLongClick(R.id.text)
boolean longclick() {
Toast.makeText(this, "点击了onlongclick", Toast.LENGTH_LONG).show();
return true;
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out);
return false;
return false;
protected void onDestroy() {
ButterKnife.unbind(this);
super.onDestroy();
otheractivity代码就一个button,为了应用ButterKnife注解,里面添加了两个点击事件,这两个点击事件使用ButterKnife注解进行设置的。(稍后讲解ButterKnife注解)
activity的切换动画是怎么进行的呢?相信大家看到上面的代码已经注意到了一个方法:overridePendingTransition(R.anim.slide_up_in, R.anim.slide_down_out);
在startActivity()或者finish()方法之后,利用该方法进行activity的切换动画。动画资源就如大家所看到的,在res/anim文件夹下面进行定义。
这个方法的第一个参数是要切换的界面的动画,第二个参数是当前界面的动画。不知道大家能否理解这个话,也就是说,第一个参数定义的动画说明要切换的界面显示的动画,第二个参数定义的动画说明当前界面如何退出的动画。
这里详细说明一两个作为说明:
R.anim.push_up_in
xmlns:android="/apk/res/android"&
android:duration="2000"
android:fromYDelta="100%p"
android:toYDelta="0"
android:duration="2000"
android:fromAlpha="0.0"
android:toAlpha="1.0"
这个动画是从Y轴的底部向Y轴顶部进行平移并且透明度从0到1进行显示的动画,这个动画的效果是让界面显示出来,呈现在用户面前。
R.anim.push_up_out
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android" &
android:duration="2000"
android:fromYDelta="0"
android:toYDelta="-100%p" /&
android:duration="2000"
android:fromAlpha="1.0"
android:toAlpha="0.0" /&
这个动画与上面向对应,说明的动画效果是界面向上由显示平移到不显示,效果图:
效果图中mainActivity到otherActivity的切换动画代码:
overridePendingTransition(R.anim.push_up_in,
R.anim.push_up_out);
这个代码设置之后到otherActivity的切换动画就如图所示。
返回的动画,是两者的互换!只不过没有了透明度的变化。
下面在介绍其他的几个,
R.anim.scale_rotate
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"
android:shareInterpolator="false"
android:duration="2000"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="0"
android:startOffset="20"
android:toXScale="1.0"
android:toYScale="1.0"
android:duration="2000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="+355"
这个动画设置了旋转和缩放,其中要说明的是,android:pivotX和android:pivotY这两个设置的是缩放和旋转的中心,取值从0%-100%之间,50%的值说明是界面的中心。
android:interpolator设置的是动画的加速度,默认线性加速度,一般不作处理,可以利用系统的值,这里就是利用的系统给定的值。
android:fromXScale与android:toXScale设置X轴缩放的起始值和最终显示值。Y轴与之对应。
android:toDegrees设置旋转的角度。
R.anim.my_alpha_action
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android"&
android:duration="2000"
android:fromAlpha="1.0"
android:toAlpha="0"
利用上面两个设置的动画,overridePendingTransition(R.anim.scale_rotate,
R.anim.my_alpha_action);
相信到此大家应该明白了动画的设置,其他的动画放大,缩小,平移,旋转等大同小异,最后我会给出代码的下载地址,大家可以详细看看切换动画的定义。
ButterKnife注解
下面说一说ButterKnife注解的用法。代码中使用了改注解,是挺方便的,不过有几个地方需要说明。
apply plugin: 'com.android.application'
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "com.husy.test.test"
minSdkVersion 11
targetSdkVersion 23
versionCode 1
versionName "1.0"
buildTypes {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.jakewharton:butterknife:7.0.0'
这个是build.gradle中的配置,新建好项目之后,里面就改动了一个地方dependencies 添加compile ‘com.jakewharton:butterknife:7.0.0’ 注意:这里的引号里面不要有空格,否则编译不通过。
这里使用的就是android studio的gradle的好处,一句compile就已经把jar包添加进来了,方便。
添加之后进行rebuild project,图:
自动会在external libraries下面显示出来,就可以使用了。
我这里使用的是7.0.0版本,最新的好像是7.0.1版本,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义。同时注册的方式也从
ButterKnife.inject(this);
ButterKnife.bind(this);
关于7.0.0的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页:
http://jakewharton.github.io/butterknife/
这个主页里面详细介绍了该功能的用法。
ButterKnifeZelezny:Android Studio 生成 ButterKnife 注入的插件
该插件我已经安装了,非常方便,省了不少事。效果图:
如何使用?
1、有所使用的布局 ID 上点击右键 (例如上图中的 R.layout.activity_settings ), 然后选择 Generate -& Generate ButterKnife Injections
2、在对话框中选择需要注入的 View, 还有个选项可以给 Adapter 创建一个 ViewHolder。
3、点击 Confirm , 代码自动生成!
/inmite/android-butterknife-zelezny
/plugin/7369
下载插件的安装:
项目中使用的android studio是目前最新的版本1.4 beta2,jdk1.7
项目运行正常。大家如果下载下来之后不能进行运行或者有什么错误,欢迎留言评论,本人会尽快回复的!
感谢关注 Ithao123Android频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊ButterKnife Zelezny是Android 里面的一款。官网地址:题外话:本人菜鸟一个,写博客仅仅是一个记录的作用。ButterKnife Zelezny这个插件有些小伙伴一直在用,还有很多小伙伴可能还不知道。个人认为他最大的作用就是一键从 布局文件中 生成对于的 View 声明和 ButterKnife 注解。大家可能看(效果图一)更加直观明了作用知道了,接下来看看在Androidstudio上怎么安装的。Andorid studio的安装方式一般有2种,第一种是在线安装,第二种是本地安装。第二张方式就是本地安装file--&settings--&Plugins--&Install plugin from disk--&然后选择下载好的文件并Ok确认--&最后重启工具(一定要重启啊!)Ok,库也加好,是不是该真正使用的时候呢?很不幸得告诉大家,截至日,ButterKnifeZelezny 1.4.不支持使用Butterknife8.0.0版本。所以我们还要加一步,降低butterknife的版本。我们在的build.gradle里面把版本 compile 'com.jakewharton:butterknife:8.0.0'修改为 compile 'com.jakewharton:butterknife:7.0.0',只需要把8该为7就Ok。修改完后点一下右上角的Sync Now。这些配置就Ok了,进入真正使用吧。在需要导入注解的或者fragment或者ViewHolder资源片段的layout地方(例如Activity里面,一定要把鼠标移到oncreate的 setContentView(R.layout.activity_main);的R.layout._main这个位置,把鼠标光标移到上去。右击选择Generate 再选择Generate ButterKnife Injections,这时候会生出一个选择框,如图:1所在列代表你要选择那些对应得id生成注解,2代表当前控件是否注解onclik事件,3代表生成对应控件的名字,4代表是否生成ViewHolder。选择完毕之后直接确认就是。看效果图一就更加明了。Ok,所以的操作步骤就完了。ok,最后在说点其他的。8.0虽然不能使用这个一键注解,但是ButterKnife还是可以用的,我在用8.0.0版本时遇到的问题。一开始我也只是加了库,但是去官网一看需要加这两个库compile 'com.jakewharton:butterknife:8.0.0' 'com.jakewharton:butterknife-compiler:8.0.0'apt这种方式可能大家还没见过,在这之前我也不知道,所以就出错了。用了这个apt还需要在Project对应的build.gradle加上这句 classpath 'com.neenbedankt.gradle.:android-apt:1.8'在对应得build.gradle加上这句apply plugin: 'com.neenbedankt.-'ok。所有的都讲完了。将为您减少类似内容我要收藏403个赞不感兴趣分享到分享到:相关文章还可以输入140字热门频道24.3万人订阅1998.9万人订阅8.4万人订阅392.8万人订阅130.1万人订阅你还可用第三方账号来登录请输入你注册的电子邮件地址绑定密保手机*您可用使用此密保手机找回密码及登录*请勿随意泄露手机号,以防被不法分子利用,骗取帐号信息手机号码发送验证码确定电子邮件请输入您的意见和建议请您输入正确的邮箱地址,以便我们和您联系,帮您解决问题。扫描下载手机客户端热门搜词Please note that GitHub no longer supports Internet Explorer versions 7 or 8.
We recommend upgrading to the latest , , or .
If you are using IE 11, make sure you .
Clone with SSH
Use an SSH key and passphrase from account.
Nothing to show
Nothing to show
New pull request
Latest commit
Jun 30, 2016
committed on GitHub
Use more annotations in Utils and Finder stub
Butter Knife
Field and method binding for Android views which uses annotation processing to generate boilerplate
code for you.
Eliminate findViewById calls by using @BindView on fields.
Group multiple views in a list or array. Operate on all of them at once with actions,
setters, or properties.
Eliminate anonymous inner-classes for listeners by annotating methods with @OnClick and others.
Eliminate resource lookups by using resource annotations on fields.
class ExampleActivity extends Activity {
@BindView(R.id.user) EditText
@BindView(R.id.pass) EditText
@BindString(R.string.login_error) String loginErrorM
@OnClick(R.id.submit) void submit() {
// TODO call server...
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.bind(this);
// TODO Use fields...
For documentation and additional information see .
Remember: A butter knife is like
only infinitely less sharp.
Add this to you project-level build.gradle:
buildscript {
repositories {
mavenCentral()
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
Add this to your module-level build.gradle:
apply plugin: 'android-apt'
dependencies {
compile 'com.jakewharton:butterknife:8.1.0'
apt 'com.jakewharton:butterknife-compiler:8.1.0'
Make sure the line apply plugin ... is placed somewhere at the top of the file.
Snapshots of the development version are available in .
Copyright 2013 Jake Wharton
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Something went wrong with that request. Please try again.
You signed in with another tab or window.
to refresh your session.
You signed out in another tab or window.
to refresh your session.Android Studio有许多非常有用的插件,比如ButterKnifeZelezny,这个用来代替繁琐的findViewById()的一个好方法。这个Android Studio的插件可以让我们在使用ButterKnife注解的时候偷懒,直接分分钟搞定注解的添加,并且整个过程还是图形化可编辑的。我在添加这个包的时候也遇到了一些问题,最后解决了,想和大家来分享一下。 先说一个小tips吧,有的同学找不到libs文件夹,原因在于可以有种模式来查看项目结构,有的方式没有体现出lib出来,而在project下可以查看到。如图,看左上角那个下拉框可选不同的模式。 接下来正式讲解第三方包的引入了。1.点击file,settings(快捷键ctrl+alt+s),在搜索框中输入plugin(方便查找),进入plugins目录下,选择底下第二个按钮Browse repositories(第三个按钮是Install plugin fromdisk,除了要获得最新插件而去自己下载,从本地安装,不然没必要用)2.在搜索框中输入butter(不得不说,这搜索框真是个好东西),点击第一个Android ButterKnife Zelezny,现点击右侧分栏的 Install plugin,稍等片刻表示插件已经下载到你的计算机了。然后会有提示重启Android Studio,确定就是了。3.最后是如何将这个包引入你的Module中去。 点击File,选择Project Structer,选app,点Dependencies.看到如下页面点击右侧的绿色+号,选择第一个Library Dependency,选择自己想要添加的控件,OK就可以了。4.在Android目录下,选择build.gradle,就可以看到你的插件导入进来了。[code]
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.jakewharton:butterknife:5.1.1'第一个是v7的包,第二个就是ButterKnife的包了 5.ButterKnife的使用方法注册:ButterKnife.inject(this); 在7.0.0版本中,注册方式也作了改变,变成了 ButterKnife.bind(this);[code]protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
mUserPresenter = new UserPresenter(this);
mSaveButton.setOnClickListener(this);
mLoadButton.setOnClickListener(this);
}在你的布局右击(如activity_main),选择Generate,最后一个就是butterknife注释了,点击自动生成。最后生成的样子是这样的。
7.0.0版本以后的注释方式作了改变,不是InjectView,而换成了Bind,不过这没什么影响,你尽管开心地用就好了,有兴趣可以去研究下源码。 上面有详细的使用教程。7.0.0版本的请移步 关于7.0.0的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页:友情提示:不要装太多的插件,选择自己需要的,不然AS卡顿的话,那感觉很爽。
如果您查看本文后有所收获,欢迎您永久收藏到自己的账号中,同时也欢迎您分享给您的朋友
相关文章推荐
(Ctrl+Enter提交) &&
已有0人在此发表见解
&在& 11:26收藏到了
版权所有,转载本站文章还请保留本站文章或作者地址。 &&
· 蜀ICP备号-1android注入之ButterKnife的使用
注入的话相信大家应该都是很熟悉的,他不仅把代码的结构简洁化,还能减少很大一部分的findviewByid的代码量 ,但是平时看到的注入都是封装在一个大的框架中的,比如xUtils,这里我们来介绍下一个独立的小框架 .jar包的下载地址 (这里说的是5.0的包)
1.配置Eclipse
在使用ButterKnife需要先配置一下Eclipse。
项目右键-Properties-Java Complier-Annotation Processing 确保设置和下图一致
接着展开Annotation Processing选择Factory Path,选中Enable project specific settings。然后点击 Add JARs&,选中ButterKnife的jar包
然后点击ok保存设置,Eclipse将问你是否重新构建新项目,点击Yes。
确保你项目的根目录里有一个.apt_generated的文件夹,文件夹中包含YOURACTIVITY$$ViewInjector.java这样的文件。
2 使用注解
2.1 在Activity中使用注解
1 2 3 4 5 6 7 8 9 10 11 12
classExampleActivityextendsActivity{ @InjectView(R.id.title)TextV @InjectView(R.id.subtitle)TextV @InjectView(R.id.footer)TextV @OverridepublicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.inject(this);
2.2 Fragment中使用注解
1 2 3 4 5 6 7 8 9 10 11
publicclassFancyFragmentextendsFragment{ @InjectView(R.id.button1)Buttonbutton1; @InjectView(R.id.button2)Buttonbutton2; @OverrideViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){ Viewview=inflater.inflate(R.layout.fancy_fragment,container,false); ButterKnife.inject(this,view);
return } }
2.3 Adapter中使用注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
publicclassMyAdapterextendsBaseAdapter{ @OverridepublicViewgetView(intposition,Viewview,ViewGroupparent){ ViewH if(view!=null){ holder=(ViewHolder)view.getTag(); }else{ view=inflater.inflate(R.layout.whatever,parent,false); holder=newViewHolder(view); view.setTag(holder); } holder.name.setText(&JohnDoe&);
returnconvertV } staticclassViewHolder{ @InjectView(R.id.title)TextV @InjectView(R.id.job_title)TextViewjobT publicViewHolder(Viewview){ ButterKnife.inject(this,view); } } }
2.4事件注入
点击事件注入
@OnClick(R.id.submit) publicvoidsayHi(Buttonbutton){ button.setText(&Hello!&); }
多个控件具有相同的事件
1 2 3 4 5 6 7 8
@OnClick({R.id.door1,R.id.door2,R.id.door3}) publicvoidpickDoor(DoorViewdoor){ if(door.hasPrizeBehind()){ Toast.makeText(this,&Youwin!&,LENGTH_SHORT).show(); }else{ Toast.makeText(this,&Tryagain&,LENGTH_SHORT).show(); } }
2.5重置注入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
publicclassFancyFragmentextendsFragment{ @InjectView(R.id.button1)Buttonbutton1; @InjectView(R.id.button2)Buttonbutton2; @OverrideViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){ Viewview=inflater.inflate(R.layout.fancy_fragment,container,false); ButterKnife.inject(this,view);
return } @OverridevoidonDestroyView(){ super.onDestroyView(); ButterKnife.reset(this); } }
2.6 可选注入
默认情况下@InjectView和@OnClick注入是必选的,如果view未找到将出现异常。为了避免出现异常,添加一个@Optional注解。
ButterKnife还包含了两个findById方法。
Viewview=LayoutInflater.from(context).inflate(R.layout.thing,null); TextViewfirstName=ButterKnife.findById(view,R.id.first_name); TextViewlastName=ButterKnife.findById(view,R.id.last_name); ImageViewphoto=ButterKnife.findById(view,R.id.photo);
为避免混淆的时代码被移除,所以要在proguard-project.txt中添加如下代码避免混淆
-dontwarnbutterknife.internal.** -keepclass**$$ViewInjector{*;} -keepnamesclass*{@butterknife.InjectView*;}
版本7.0.0中,现在注解已经不叫@InjectView了,而叫@Bind,感觉更贴合语义。同时注册的方式也从
ButterKnife.inject(this);
ButterKnife.bind(this);
关于7.0.0的ButterKnife的各种用法和功能,可以参考ButterKnife的github上的主页:
注,在windows下,某些eclipse版本无法选择Compiler/Annotation Processing&。下面是两个版本的比较。
adt-bundle-windows-x86_64- (较新的版本,不可以)
adt-bundle-windows-x86_64-13年的版本,可以)
原因是谷歌在bundled版本中移除了Annotation Processing 选项,目的是为了锁定到他们自己新出的注解系统中: /extras/android/support/annotations/android-support-annotations.jar
github上的解决办法是安装如下图所示的东西:
当然换成android studio应该更好解决
可以让你在添加Butterkinfe注解时偷偷懒,直接点击几下鼠标既可以完成注解的增加,同时还是图形化的操作,可以说,大大的减轻了开发负担。尤其是当你的layout中有很多很多的view需要通过findviewbyid来获得引用时。实际上如果不用这个插件而通过手打加ButtefKnife注解的方式,要是view很多启示也挺麻烦的,不是吗?
首先看看如何在Studio上安装该插件,直接看图:
安装好后需要restart你的Android Studio。
在使用此插件前,需要已经导入了butterknife的jar(或者在build.gradle中已经加入:compile'com.jakewharton:butterknife:7.0.0')
随后,在你需要导入注解的Activity或者Fragment或者ViewHolder的layout资源代码上,右击,选择Generate然后Generate ButterKnife Injections,这时候生成类似于下列的选择框:
Element为view的类型,ID为layout中资源的id名字,Variable Name即为你在代码中引用出来的变量名,点击Confirm后即可。
下面是Android ButterKnifeZelezny的github上的一个动态使用流程图:
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 butterknife android 的文章

 

随机推荐