Android之butterknife(懒人库)
这个开源库可以让我们从大量的findViewById()和setOnclicktListener()解放出来,其对性能的影响微乎其微,其自定义注解的实现都是限定为RetentionPolicy.CLASS,也就是注解到编译出.class文件为止有效,在运行时不额外消耗性能。
我们先将butterknife库导入Android Studio中,导入到步骤如下:
   
点击Project Structure,选择你的app,然后点击Dependencies,再点击右边的加号
然后就出现了上面的界面,输入库名butterknife,点击OK,它就会自动添加了,不过要稍等一小会。 然后打开project下的“build.gradle”,然后在"dependencies"下增加了“classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'”,然后 在打开app文件夹下的“build.gradle”,添加“apply plugin: 'android-apt'”,“apt 'com.jakewharton:butterknife-compiler:8.1.0'”,然后点击“Sync Now”。
添加完,我们通过代码来演示一下到底如何用:

1.Activity中的绑定

<code class="hljs scala has-numbering"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ExampleActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span><span class="hljs-annotation">@Bind</span>(R.id.title) TextView title;<span class="hljs-annotation">@Bind</span>(R.id.subtitle) TextView subtitle;<span class="hljs-annotation">@Bind</span>(R.id.footer) TextView footer;<span class="hljs-annotation">@Override</span> public void onCreate(Bundle savedInstanceState) {<span class="hljs-keyword">super</span>.onCreate(savedInstanceState);setContentView(R.layout.simple_activity);ButterKnife.bind(<span class="hljs-keyword">this</span>);}
}</code>
这就相当于绑定了控件了。

2.资源绑定

通过预定义的注解(@BindBool, @BindColor, @BindDimen, @BindDrawable, @BindInt, @BindString)结合一个资源 ID以和表示该资源类型的相应的字段。

<code class="hljs scala has-numbering"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ExampleActivity</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Activity</span> {</span><span class="hljs-annotation">@BindString</span>(R.string.title) String title;<span class="hljs-annotation">@BindDrawable</span>(R.drawable.graphic) Drawable graphic;<span class="hljs-annotation">@BindColor</span>(R.color.red) int red; <span class="hljs-annotation">@BindDimen</span>(R.dimen.spacer) Float spacer; <span class="hljs-comment">// ...</span>
}</code><div class="save_code tracking-ad" style="display: none;" data-mod="popu_249"><a target=_blank target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png" alt="" /></a></div>

3.Fragment中的绑定

你还可以通过提供你自己的根视图来执行任意对象的绑定。

<code class="hljs java has-numbering"><span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">FancyFragment</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Fragment</span> {</span><span class="hljs-annotation">@Bind</span>(R.id.button1) Button button1;<span class="hljs-annotation">@Bind</span>(R.id.button2) Button button2;<span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span> View <span class="hljs-title">onCreateView</span>(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fancy_fragment, container, <span class="hljs-keyword">false</span>);ButterKnife.bind(<span class="hljs-keyword">this</span>, view);<span class="hljs-keyword">return</span> view;}
}</code>

4.监听器绑定Butter knife可以自动将侦听器配置为方法。

<code class="hljs java has-numbering"><span class="hljs-annotation">@OnClick</span>(R.id.submit)
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">submit</span>(View view) {}<span class="hljs-annotation">@OnClick</span>(R.id.submit)
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">submit</span>() {}
<span class="hljs-comment">//定义的指定类型将会被自动转换</span><span class="hljs-annotation">@OnClick</span>(R.id.submit)
<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">sayHi</span>(Button button) {button.setText(<span class="hljs-string">"Hello!"</span>);
}</code>

Android之butterknife(懒人库)相关推荐

  1. 懒人库ButterKnife的应用

    1.关于ButterKnife的配置 在Module的gradle中[截止目前版本8.4.0] annotationProcessor 'com.jakewharton:butterknife-com ...

  2. Android懒人库

    2019独角兽企业重金招聘Python工程师标准>>> UI NotBoringActionBar NotBoringActionBar教你怎么作出炫酷的ActionBar. 英文教 ...

  3. Android 无线 ADB 懒人打法:WiFiADB 调试

    0. 开言 其实做为安卓开发者,插着手机调试是很麻烦的.

  4. css自动转rem,css之px自动转rem—“懒人”必备

    作为一名前端开发,尤其是在做移动端适配时,rem是我们经常用到的单位,它的好处大家可以自行搜索,网上已经有很多了. 但是我们再将设计稿上的px转换成rem时,得手动的去计算,这是一个很耗时.费力的过程 ...

  5. MvvmLazy Android懒人框架

    MvvmLazy Android懒人框架(kotlin版) 目前,android流行的MVC.MVP模式的开发框架很多,然而一款基于MVVM模式开发框架却很少. 个人搜寻了市面上大量的开源框架,秉承减 ...

  6. 【原创】窥视懒人的秘密---android下拉刷新开启手势的新纪元

    小飒的成长史原创作品:窥视懒人的秘密---android下拉刷新开启手势的新纪元转载请注明出处 **************************************************** ...

  7. android懒人笔记

    摘自大神Trinea 一.ListView android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新,ListView.ViewPager.WebView.Expa ...

  8. 懒人必备!只需一行代码,就能导入所有的Python库

    今天给大家介绍一个懒人Python库--Pyforest. 使用一行代码,就能导入所有的Python库(本地已经安装的). GitHub地址:https://github.com/8080labs/p ...

  9. Android 拍摄(横\竖屏)视频的懒人之路

    想一想,我们聊过AudioReord,AudioTrack,MediaPlayer,那多媒体四大金刚,就剩下了MediaRecorder了(SoundPool?我这里信号不好···).其实MediaR ...

最新文章

  1. 学习 jQuery UI
  2. C#中怎样将数组的顺序打乱随机排序
  3. List集合中两种遍历方式
  4. Qt文档阅读笔记-qmake入门指南
  5. 查漏补缺:2020年搞定SpringCloud面试(含答案和思维导图)
  6. Linux内核协议栈- 创建socket:__sock_create函数调用关系
  7. 关于printk显示问题(转)
  8. 【python VS Code】调用自定义模块 ModuleNotFoundError: No module named XXX
  9. 利用canvas的getImageData()方法制作《在线取色器》
  10. Java 培训 MySQL 体系构架、存储引擎和索引结构
  11. java pdfbox2 中文乱码_使用PdfBox实现pdf转图片,解决中文方块乱码等问题
  12. clang 中英文帮助手册
  13. Codeforces Gym 2015 ACM Arabella Collegiate Programming Contest
  14. 学生管理系统报错合集
  15. 【BZOJ1455】罗马游戏(左偏树)
  16. java中Boolean和boolean的区别
  17. 如何查询期刊的SCI分区
  18. 【随手记】共振峰的特性、与音高pitch
  19. Linux常用命令 -- lsblk(简单易学)
  20. 基于javaweb的图书馆借阅管理系统(java+springboot+bootstrap+html+mysql)

热门文章

  1. char **argv什么意思呢
  2. XMPP与SIP-IM两大协议的对比
  3. 一个简单的俄罗斯方块实现
  4. 数据结构(递归及应用)
  5. cesm2(clm5.0)移植方法
  6. 电子招投标智能辅助评标系统,有哪些实施成效?
  7. 【STC8H8K64U】开天斧3.1学习笔记——LED闪烁
  8. ffprobe 获取视频每秒总帧数或视频总帧数及视频总时长
  9. MAC地址找不到解决方案
  10. plt如何随心所欲的更改x轴坐标