上一篇文章介绍了如何搭建 Kotlin 的开发环境,可是这个开发环境依然基于 Android Studio,而在 Android Studio 上使用 Java 进行编码,本来就是理所应当的,何必还要专门弄个 Kotlin,这个 Kotlin 相比 Java 到底有哪些好处呢?我们可以把 Kotlin 看作是 Java 的升级版,它不但完全兼容 Java,而且极大精简了代码语法,从而使开发者专注于业务逻辑的编码,无需在繁琐的代码框架之间周旋。当然,若想充分运用 Kotlin 的优异特性,除了导入 Kotlin 的核心库,还得导入 Kotlin 的扩展库与 Anko 库。具体到编译配置文件,则要进行以下两处修改:1、打开项目的 build.gradle,补充添加 anko 的版本号声明,以及 Kotlin 扩展库的路径,完整的编译配置如下所示:
- buildscript {
- ext.kotlin_version = "1.1.2"
- ext.anko_version = "0.9"
- repositories {
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:2.3.0'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
- }
- }
2、打开模块的 build.gradle,在文件开头补充添加 Kotlin 的扩展插件,配置添加如下:
- apply plugin: 'kotlin-android'
- apply plugin: 'kotlin-android-extensions'
接着在 dependencies 节点下补充添加 anko 插件的编译说明,如下所示:
- compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
- compile "org.jetbrains.anko:anko-common:$anko_version"
编译配置修改完毕,接下来我们尝试进行简单的 Kotlin 编码,看看 Kotlin 的代码究竟有多么的简练。首先在之前的 hello 模块包名上右击,依次选择弹出菜单 "New"——"Kotlin Activity"(也可直接依次选择顶部菜单 "File"——"New"——"Kotlin Activity"),右键菜单的截图如下所示:
选择菜单后打开 Kotlin 的 Activity 创建页面,单击 "Next" 按钮进入创建信息的填写页面,如下图所示:
这里填上 Activity 的名称 EasyActivity,对应的布局文件名则为 activity_easy,最后单击 "Finish" 按钮完成 EasyActivity.kt 的创建。现在给前面创建的布局文件 activity_easy.xml 添加几个 TextView 和 Button 控件,布局比较简单就不贴了。因为本文主要介绍 Kotlin 开发,不再对 Adnroid 的 Java 开发做详细介绍,所以读者如果对 Android 开发还不熟悉的话,建议先根据《Android Studio 开发实战:从零基础到 App 上线》一书学习基本的 Android 开发。接下来是本文的重点,以前我们操纵控件之时,都要先通过 findViewById 方法获得控件对象,然后再调用相关函数设置对象属性。比如现在有个名为 tv_hello 的 TextView 控件,准备在代码中把 tv_hello 的显示文本改为 "你好呀",这用 Java 编码的话即是下面两行代码:
- TextView tv_hello = (TextView) findViewById(R.id.tv_hello);
- tv_hello.setText("你好呀");
修改文本这个功能,如果用 Kotlin 实现会是怎么样呢?下面就让我们实验一下。首先在 EasyActivity.kt 代码开头补充下面一行:
- import kotlinx.android.synthetic.main.activity_easy.*
这行导入语句的目的是引进 Kotlin 的控件变量自动映射功能,接下来的代码就无需再调用 findViewById 方法,直接把控件 ID 当作控件对象使用即可。比如修改 TextView 的显示文本,采用 Kotlin 编码只要下面一行:
- tv_hello.setText("你好呀")
如此一来,原来的两行代码精简到一行代码,去掉了原先获取控件对象的冗余代码。然而 Kotlin 的便利性并不仅仅限于此,它对控件甚至都无需调用 set***/get*** 方法,而允许直接修改 / 获取控件的属性值,像设置文本这个功能,可以继续简化为下面这行代码:
- tv_hello.text = "你好呀"
进一步简化之后,原代码的 "set" 与两个括号都被去除,但是新代码反而更容易理解了。也许有人说,Kotlin 在这里只精简了一行代码,不见得比 Java 有多大优势,那就继续进行其它常见功能的 PK,有道是五局三胜,赢得多才足以服众。上面的第一局为修改控件文本的 PK,结果是 Kotlin 小胜;接下来依次再设四局 PK,其中第二局为点击监听器的处理。Button 是 Android 的常用按钮控件,代码中经常要处理 Button 控件的点击事件,下面的 Java 代码就是响应 Button 点击的一个例子:
- final Button btn_click = (Button) findViewById(R.id.btn_click);
- btn_click.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- btn_click.setText("您点了一下下");
- }
- });
其实这个响应功能很简单,仅仅在点击按钮之时修改按钮文本而已,可是因为 Java 需要实现点击监听器,所以无奈还得写好几行的匿名类代码。如果使用 Kotlin 实现相同的功能,又是怎样的呢?且看下面的 Kotlin 代码:
- btn_click.setOnClickListener {
- btn_click.text = "您点了一下下"
- }
不得了了,Kotlin 只需一行代码就完事,想不到吧,此局 Kotlin 完胜。第三局换个 Button 控件的长按事件,下面的 Java 代码是响应 Button 长按的一个例子:
- final Button btn_click_long = (Button) findViewById(R.id.btn_click_long);
- btn_click_long.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- btn_click_long.setText("您长按了一小会");
- return true;
- }
- });
可以看到 Java 代码依旧冗长,再看看 Kotlin 代码如何接招:
- btn_click_long.setOnLongClickListener {
- btn_click_long.text = "您长按了一小会";
- true
- }
Kotlin 仍旧一行代码搞定,真是叫人刮目相看,此局 Kotlin 依然完胜。第四局咱不比监听器了,Java 在匿名类这块很吃亏,那来比另一种常用的 Toast 提示功能,该功能的 Java 代码只有一行:
- final Button btn_toast = (Button) findViewById(R.id.btn_toast);
- btn_toast.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(EasyJavaActivity.this, "小提示:您点了一下下", Toast.LENGTH_SHORT).show();
- }
- });
上面外层的点击监听器请忽略,正宗的 Toast 代码真的只有一行,且看 Kotlin 怎么拆招:
- btn_toast.setOnClickListener {
- toast("小提示:您点了一下下")
- }
哈哈,Kotlin 连同监听器的代码,比 Java 的一行 Toast 代码都要少,此局 Kotlin 继续小胜。可是为啥 Kotlin 的 toast 函数不区分显示时长呢?原来 toast 方法默认为短时显示,即 Toast.LENGTH_SHORT。这下 Java 方窃喜,虽然我的代码比较长,但是足够灵活呀,想要短一点就 LENGTH_SHORT,想要长一点就 LENGTH_LONG。正好第五局比试 Toast 的长时提示,该功能的 Java 代码也只有一行:
- final Button btn_toast_long = (Button) findViewById(R.id.btn_toast_long);
- btn_toast_long.setOnLongClickListener(new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- Toast.makeText(EasyJavaActivity.this, "长提示:您长按了一小会", Toast.LENGTH_LONG).show();
- return true;
- }
- });
现在 Kotlin 没法调用 toast 函数了吧,Java 洋洋自得总算能够扳回一局,谁料 Kotlin 大喝一声 "看我来":
- btn_toast_long.setOnLongClickListener {
- longToast("长提示:您长按了一小会");
- true
- }
真是未曾想到,Kotlin 另外有个 longToast 招式,仅仅多了四个字母而已,于是此局 Kotlin 理应小胜。五局 PK 下来,Kotlin 大获全胜,Java 溃不成军,直教人长嘘短叹 "长江后浪推前浪,前浪死在沙滩上"。以上初步介绍了 Kotlin 的几种常见用法,从下一篇文章开始,将系统地讲解 Kotlin 的基本语法知识。__________________________________________________________________________本文现已同步发布到微信公众号 "老欧说安卓",打开微信扫一扫下面的二维码,或者直接搜索公众号 "老欧说安卓" 添加关注,更快更方便地阅读技术干货。
来源: http://blog.csdn.net/aqi00/article/details/73770301