写了很多代码,却发现它们干不了多少事情,终究还是会苦恼的。比如我一直比较痛苦的一件事儿就是:
Button button = (Button) findViewById(R.id.btn);
如果我需要很多个按钮和图片,那么我们要写一大片这样的 findViewById。。妈呀。。。这活我干不了啦。。
不过用 Kotlin 的 Android 扩展插件,我们就可以这样:
先上布局文件:
main.xml
在 Activity 中:
注意到:
importkotlinx.android.synthetic.main.load_activity.*
导入这一句之后,我们就可以直接在代码中使用 start、textView,他们分别对应于 main.xml 中的 id 为 start 的按钮和 id 为 textView 的 TextView。
于是你就发现你再也不用 findViewById 了,多么愉快的一件事!!!当然,你还会发现 Toast 的调用也变得简单了,那其实就是一个扩展方法 toast();而 startActivity 呢,其实就是一个 inline加reified 的应用——这我们前面都提到过了。
还有一个恶心的东西就是 UI 线程和非 UI 线程的切换问题。也许你会用 handler 不断的 post,不过说真的,用 handler 的时候难道你不颤抖么,那可是一个很容易内存泄露的魔鬼呀~哈哈,好吧其实我不是说这个,主要是用 handler 写出来的代码 实在 太 丑 了 !!
原来在 Java 当中,我们这么写:
而在 Kotlin 当中呢,我们只需要这么写:
自己感受一下吧。
下面我们再来提一个有意思的东西,我们从做 Android 开发一开始就要编写 xml,印象中这个对于我来说真的是一件痛苦的事情,因为它的工作机制并不如代码那样直接(以至于我现在很多时候居然喜欢用 Java 代码直接写布局)——当然,最主要的问题并不是这个,而是解析 xml 需要耗费 CPU。Kotlin 有办法可以解决这个问题,那就是 DSL 了。下面给出一个例子:
一个 LinearLayou t包含了一个 Button,这段代码你可以直接写到你的代码中灵活复用,就像这样:
这样做的好处真是不少:
比起 xml 的繁琐来,这真是要清爽很多
布局本身也是代码,可以灵活复用
再也不用 findViewById 了,难道你不觉得在这个上面浪费的生命已经足够多吗
事件监听很方便的嵌到布局当中
DSL 方式的布局没有运行时的解析的负担,你的逻辑代码怎么运行它就怎么运行。
Anko还增加了更多好玩的特性,有兴趣的可以参考:Anko@Github (https://github.com/Kotlin/anko)
附《Android核心知识笔记2020》分享
前段时间我和圈子里的几位架构师朋友一起闲聊时的突发奇想,我们在学习Android开发的时候或多或少也受到了一些前辈的指导,所以想把这份情怀延续下去。三个月后,这套资料就出来了,需要这份资料的朋友加Android学习交流群1049273031即可获取。