Kotlin入门(2)让App开发变得更容易
上一篇文章介绍了如何搭建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的基本语法知识。
__________________________________________________________________________
本文现已同步发布到微信公众号“老欧说安卓”,打开微信扫一扫下面的二维码,或者直接搜索公众号“老欧说安卓”添加关注,更快更方便地阅读技术干货。

Kotlin入门(2)让App开发变得更容易的更多相关文章
- spring 第一篇(1-1):让java开发变得更简单(下)
切面(aspects)应用 DI能够让你的软件组件间保持松耦合,而面向切面编程(AOP)能够让你捕获到在整个应用中可重用的组件功能.在软件系统中,AOP通常被定义为提升关注点分离的一个技术.系统由很多 ...
- spring 第一篇(1-1):让java开发变得更简单(下)转
spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...
- 让iOS开发变得更有效率-分类、工具类
在工作中整理的一些分类与工具类,分享给大家.这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可.下载地址:https://github.com/lee ...
- spring 第一篇(1-1):让java开发变得更简单(上)
1.释放POJOS能量 传统开发中是如何束缚POJOS呢,如果你开发过java很长时间,那你一定有接触过EJB的开发.那时候开发一个小小的功能都要扩展框架的类或者实现其接口.所以你很容易在早期的Str ...
- GVIM与模板——让FPGA开发变得更简单
还在使用FPGA开发环境自带的代码编辑器?还在逐个字母敲击冗长重复的代码?明德扬至简设计法让你快速提高代码编写效率!利用GVIM这一高效的编辑工具并添加自定义模板,通过简短的脚本命令即可自动生成所有常 ...
- .net敏捷开发框架 力软敏捷开发(learun) 让开发变的更简单
版本:6.1.6.2 体验地址:www.fishcmonkey.com 联系QQ:6539471
- .net敏捷开发框架 力软(learun) 让开发变的更简单
版本:6.1.6.2 体验地址:www.fishcmonkey.com 联系QQ:6539471
- Kotlin入门教程——目录索引
Kotlin是谷歌官方认可的Android开发语言,Android Studio从3.0版本开始就内置了Kotlin,所以未来在App开发中Kotlin取代Java是大势所趋,就像当初Android ...
- phongap、APICloud、ionic等app开发平台你都知道吗?
大众创业热,很多人都想在互联网大展拳脚,然而大部分人却是非技术背景.针对这个行业痛点,现在国内外涌现出众多APP开发工具,开发者只要有相关的HTML5.CSS和JavaScript知识,便可以轻松快速 ...
随机推荐
- vue 自学笔记(4): 样式绑定与条件渲染
一:对象绑定 Vue 对于页面的样式加载也有独特的方式,按照 Vue 提供的方式,我们可以轻松的控制它们的呈现. 假使我们要实现点击 div 变色 Vue 提供的样式方案的本质是对元素节点进行属性的绑 ...
- 深度学习笔记(八)Focal Loss
论文:Focal Loss for Dense Object Detection 论文链接:https://arxiv.org/abs/1708.02002 一. 提出背景 object detect ...
- Fiddler怎样抓取手机的包
Fiddler作为代理服务器,可以拦截到手机发出的请求,再经过Fiddler发送到服务器,获取到服务器响应的数据,这个过程,只要设置配置好了,使用过程不受影响. 要想抓取到手机的包,先要给手机设置一个 ...
- 使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等)
使用Chrome开发者工具调试Android端内网页(微信,QQ,UC,App内嵌页等) 前言 移动端页面调试一直是好多朋友头疼的问题,iOS 由于其封闭的特性和整体较高的性能,整体适配相对好做,调试 ...
- SOA和微服务架构的区别
微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...
- UFLDL 教程学习笔记(一)神经网络
UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...
- 第三章 服务治理:Spring Cloud Eureka
Spring Cloud Eureka是Spring Cloud Netflix 微服务套件中的一部分,它基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理功能.Spri ...
- Asp.Net Core微信服务中间件-.NetCore2.1
又封周末,闲暇无聊,随手写了一个关于微信公众号服务的中间件,基于.NetCore2.1.服务类库采用.Net Standard2.0,兼容.net 4.6.1. 整体思路是,设计一个中间件,提供微信消 ...
- LeetCode刷题指南(字符串)
作者:CYC2018 文章链接:https://github.com/CyC2018/CS-Notes/blob/master/docs/notes/Leetcode+%E9%A2%98%E8%A7% ...
- 【Java基本功】很多人经常忽视的Java基础知识点
*.Java文件 问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件 ...